設將n個整數存放在一維數組R中。設計一個算法,將R中的序列循環左移P個位置,即將R中的數據由{X0,X1,X2....Xn-1} 變換為{Xp,Xp+1,...,Xn-1,X0,X1,X2...,Xp-1}。
思路:要實現R中的序列循環左移P個位置,只需要將R中前P個元素逆置,再將剩下的元素逆置,最后將R中所有元素再整體逆置。
逆置操作:
1 void Reverse(int R[],int left,int right) 2 { 3 int i,j; 4 int temp; 5 for(i=left,j=right;i<j;++i,--j){ 6 temp = R[i]; 7 R[i] = R[j]; 8 R[j] = temp; 9 } 10 }
實現循環左移:
1 void RCR(int R[],int n,int p) 2 { 3 if(p<=0||p>=n) 4 cout<<"Error"<<endl; 5 else{ 6 Reverse(R,0,p-1); 7 Reverse(R,p,n-1); 8 Reverse(R,0,n-1); 9 } 10 }