思路:
循环左移p个位置 使用逆序方法:原序列 1 2 3 4 5 6 当p=2时 左移两位 3 4 5 6 1 2
相当于先逆序前两位 2 1 3 4 5 6 再逆序后四位 2 1 6 5 4 3 再全部逆序 3 4 5 6 1 2
即使用三次逆序达到左移效果。
关键:
逆序方法:数组下标 0 5 交换 1 4交换 2 3交换
实际上就是 i 和 n-1-i 交换 (n为元素总数)
eg:从from 到to逆序 : 从0到5逆序:(from=0 to=5)
即:i 和 (from+to)-i 交换
#include<bits/stdc++.h>
using namespace std;
int r[6]={1,2,3,4,5,6};
int i=0;
int n = sizeof(r) / sizeof(r[0]);
void reverse(int r[],int from,int to){
for(i=from;i<=(to+from)/2;i++){
int temp=r[i];
r[i]=r[(to+from)-i];
r[(to+from)-i]=temp;
}
}
void print(int r[]){
for(int i=0;i<n;i++) cout<<r[i]<<" ";
cout<<endl;
}
void conrever(int r[],int p){
reverse(r,0,n-1);
print(r);
reverse(r,0,n-p-1);
print(r);
reverse(r,n-p,n-1);
print(r);
}
int main(){
cout<<n<<endl;
conrever(r,2);
return 0;
}