设将n(n>1)个整数存放到一维数组R中。将R中的序列循环左移P(0<P<n)个位置.设计一个高效的算法如何实现。

给出算法的基本思想;再根据设计思想用C语言描述算法,在计算所设计算法的时间和空间复杂度。

直接将R中的前P个数存在一个数组里,再将R中后面数据前移,最后把前P个数拷贝到R数组后P个位置。
假设已经定义R【N】(N>n),P,并且R中已经存好n个数
在程序前添加 #include<malloc.h>
int *store=(int *)malloc((size_t) P );
int i;
for(i=0;i<P;i++) *(store +i)=R[i];
for(i=0;i<n-P;i++) R[i]=R[i+P];
for(i=0;i<P;i++) R[i+n-P]=*(store +i);

一共占内存(1+N+P)*2或(1+N+P)*4字节,应该效率挺高了吧
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-09-21
void reverse(int R[],int l,int r){
int i ,j;
int temp;
for(i=l,j=r;i<j;i++,j--){
temp=R[i];
R[j]=R[i];
R[j]=temp;
}
}

void RCR(int R[],int n,int p){
if(p<=0||p>=n){
print('error')
}else{
reverse(R,0,p-1);
reverse(R,p,n-1);
reverse(R,0,n-1);
}
}本回答被提问者采纳
第2个回答  2011-09-08
哥们,曲师的吧,一个班的吧
相似回答