请设计一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; } }