设将n(x>1)个整数存放到一维数组R中,设计一个在时间和空间两方面都尽可能高效的算法。将R中保存的序列循环左移p(0<p<n)个位置,即将R中的数据由(X0,X1,…,Xn-1)变换为(Xp,Xp+1,…,Xn-1,X0,X1,…Xp-1)。
设X0,X1,...Xp-1为a,Xp,Xp+1,...,Xn-1为b
则本题的要求为将ab转成ba
处理步骤:
1. 逆置a得到a逆b
2. 再逆置b得到a逆b逆
3. 再将整个a逆b逆逆置得到ba
void Reverse(int R[], int from ,int to){
int i, temp;
for(i=0;i<(to-from+1)/2;i++){
temp=R[from+i];
R[from+i]=R[to-i];
R[to-i]=temp;
}
}//Reverse
void Converse(int R[]; int n; int p){
Reverse(R,0,p-1);
Reverse(R,p,n-1);
Reverse(R,0,n-1);
}