将数组中的数循环右移

设将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 }
原文地址:https://www.cnblogs.com/ll-10/p/9697986.html