int gcd ( int a, int b )
{
int c;
while ( a != 0 ) {
c = a; a = b%a; b = c;
}
return b;
}
void shift(volatile int*arr, int len, int k){
int i,j,c;
int t1,t2;
printf("gcd:%d\n",gcd(len,k));
for(i=0;i<gcd(len,k);i++){
j=k+i;
if(j>=len)
j-=len;
t1 = arr[j];
arr[j]=arr[i];
while(j!=i){
j+=k;
if(j>=len)
j-=len;
t2 = arr[j];
arr[j]=t1;
t1=t2;
printf("j:%d\n",j);
for(c=0;c<len;c++)printf("%d,",arr[c]);
printf("\n");
}
printf("i:%d\n",i);
}
}
jueves, 1 de diciembre de 2011
Rotate array k times in linear time
Suscribirse a:
Entradas (Atom)