题目
设将n(n>1)个整数存放到一维数组R中。试设计一个在时间和空间两方面都尽可能高效的算法。将R中保存的序列循环左移p(0<p<n)个位置,即将R中的数据由(X0,X1…Xn-1)变换为(Xp,Xp+1…Xn-1,X0,X1…Xp-1)。
题解
分析
1. 创建int型数组R
数组的创建有三种方式:
①使用常量表达式指定数组维数
int array[5];
②使用变量表达式指定数组维数。
int n = 5;
int array[n];
③使用malloc()函数。
int *array ;
array = (int *) malloc(5 * sizeof(int)); // 5 个连续的地址
2. 对数组R前后两部分的逆置
逆置算法:
代码
void reverse(int R[],int j,int k){
int m,n,temp;
for(m=j,n=k;j<k;j++,k--){
temp = R[m];
R[m] = R[n];
R[n] = temp;
}
}
void main(){
int *R,p;
R=(int *)malloc(n*sizeof(int));
for(int i=0;i<n;i++){
R[i]=i+1;
}
reverse(R,0,p-1);
reverse(R,p,n-1);
reverse(R,0,n-1);
}