问题 问答题

设将n(n>1)个整数存放到一维数组R中,试设计一个在时间和空间两方面尽可能有效的算法,将R中保有的序列循环左移p(0<p<n)个位置,即将R中的数据由(X1X2……Xn)变换为(XpXp+1……XnX1……Xn-1)要求:

答案

参考答案:算法描述:
Void sift_left(int a[],int n,int P) {
Reverse(a,0,n-1);//移动了3n/2次数据;
Reverse(a,0,n-p-1);//移动了3(n-p)/2次数据;
Reverse(a,n-p,n-1);}//移动了3p/2次数据;
Void Reverse(int A[],int left,int right)
{
int n=right-left+1;//设置一个辅助空间;
if(n<=1) return 0;//数组为空;
for(int i=0;i<n/2;i++){//进行逆转;
int temp=A[i];
A[i-1]=A[n-i+1];
A[n-i+1]=temp;}

问答题
单项选择题