1.题目描述
将n个整数存放在一维数组R中。设计一个在时间和空间两方面都尽可能高效的算法。将R中保存的序列循环左移p个位置,即将R中的数据由(X0,X1,…Xn-1)变换为Xp,Xp-1,…Xn-1,X0,X1,…Xp-1
2.代码描述
#include<iostream>
#include<algorithm>
#define InitSize 12
void Reverse01(int A[],int l,int r) //l和r都为下标
{
int mid = (l + r) / 2;
for (int i = l; i < mid; i++)
{
int temp = A[i];
A[i] = A[r - i];
A[r - i] = temp;
}
}
void Reverse02(int A[], int l, int r)//l和r都为数组下标 都是遍历一半
{
int i = l, j = r;
while ( i < j) //这种写法不易出错 for(int i = 0,j = r;i<j;i++,j--)
{
int temp = A[i];
A[i] = A[j];
A[j] = temp;
i++; j--;
}
}
void move(int A[], int m, int n)
{
Reverse01(A, 0, m - 1); //0--2 都是数组下标的数值
Reverse01(A, m, m+n - 1); //3--6
Reverse01(A, 0, m + n - 1); //0--6
}
void PrintArray(int A[])
{
for (int i = 0; i<7; i++)
{
// printf("%d", sizeof(A) / sizeof(int)); //这个方法放在这里算不出来7,网上也说放在函数中不行
printf("%d\n", A[i]);
}
}
int main()
{
int array[7] = { 1,2,3,4,5,6,7};
move(array, 3, 4);
PrintArray(array);
return 0;
}