题目内容:
将数组中的元素(X0,X1......Xn)经过移动后变为(Xp,Xp+1,...... ,Xn-1,X0,X1,..... ,Xp-1)即循环左移p个位置。
实现思路:
只需要将前 p-1 个元素逆置,再将p~n-1位置的元素逆置,然后将整个数组逆置即可。
代码实现:
void reverse(int a[],int left,int right,int k)
{ //left和right是数组两端元素下标
int temp;
for (int i=left,j=right; i<left+k && i<j;++i,--j)
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
void moveP(int a[],int n,int p){
//调用reverse函数
reverse(a,0,p-1,p); //先将0~p-1位置的元素逆置
reverse(a,p,n-1,n-p); //再将p~n-1位置的元素逆置
reverse(a,0,n-1,n); //整个数组逆置
}
题目收获:
1.元素逆置——先分段逆置,再整体逆置;
2.元素逆置用到交换函数,引入中间变量temp;