设将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 }