您的位置:首页 > 编程语言

编程之美-数组循环移位

2013-03-14 12:39 204 查看
#include<stdio.h>

void RightShift1(int *arr,int N,int K)
{//循环右移

K %= N;
while(K--)
{
int t = arr[N - 1];
for(int i = N - 1; i > 0;--i)
{
arr[i] = arr[i - 1];
}
arr[0] = t;
}
}

void Reverse(int *arr,int b,int e)
{
for( ; b < e; b++,e--)
{
int temp = arr[e];
arr[e] = arr[b];
arr[b] = temp;
}
}

void RightShift2(int *arr,int N,int K)
{
K %= N;
Reverse(arr,0,N - K -1);
Reverse(arr,N - K,N-1);
Reverse(arr,0,N-1);
}

int gcd(int a,int b)
{

if( b == 0 )
return a;
else
return gcd(b,a%b);
}

void RightShift3(int *arr,int N, int K)
{//循环右移

int i,j;
int num = gcd(K,N);
for( i = 0 ;i < num;++i)
{
int tmp = arr[i];
j = i;
while(1)
{
int m = (j + N-K) % N;
if(m == i)
break;
arr[j] = arr[m];
j = m;
}
arr[j] = tmp;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  编程之美