题目:
设计一个算法,将一个含有N个元素的数组循环右移K位,要求时间复杂度为O(N),只允许使用两个附加变量
思路:
如abcd1234:
逆序排列abcd:abcd1234---》dcba1234
逆序排列1234:dcba1234---》dcba4321
逆序所有 :dcba4321---》1234abcd
下面是代码:
1 #include<iostream> 2 using namespace std; 3 4 typedef int INT; 5 6 void reversed(INT ary[],int i,int j) 7 { 8 int k=i; 9 int m=j; 10 for(;k<=m;k++,m--) 11 { 12 INT temp; 13 temp=ary[k]; 14 ary[k]=ary[m]; 15 ary[m]=temp; 16 } 17 return; 18 } 19 20 void rightshift(INT *ary,int n,int k) 21 { 22 k=k%n; 23 if(k==0) 24 return; 25 reversed(ary,0,n-k-1); 26 reversed(ary,n-k,n-1); 27 reversed(ary,0,n-1); 28 } 29 30 int main() 31 { 32 INT ary[8]={1,2,3,4,5,6,7,8}; 33 rightshift(ary,8,4); 34 for(int i=0;i<8;i++) 35 cout<<ary[i]<<‘ ‘; 36 cout<<endl; 37 38 system("pause"); 39 40 }
时间: 2025-01-05 05:34:49