请设计一C语言函数(注:只须写出函数,不必写出完整程序),该函数的功能是用尽可能高的时间效率与空间效率将一个int类型的数组A[0..n-1]的所有元素依次循环右移k个位置。
例如,对于某数组,当k=3时(即把数组所有元素循环右移3个位置),是将
10 | 20 | 30 | 40 | 50 | 60 | 70 |
转换为
50 | 60 | 70 | 10 | 20 | 30 | 40 |
void Reverse(int *arr,int p,int q){
for(; p < q; p++,q--){
int temp = arr[p];
arr[p] = arr[q];
arr[q] = temp;
}
}
void RightMove(int *arr,int n,int k){
Reverse(arr, 0, n - 1);
Reverse(arr, 0, k - 1);
Reverse(arr, k, n - 1);
} void fun (int *w,int m)
{
int i,j;
int x;
for(i=1;i<=m;i++){
x=w[n-1]; //放在最后位置
for(j=n-1;j>=0;j--){
w[j]=w[j-1];
}
w[0]=x;
}
}