#include<iostream>
using namespace std;
void swap(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
//3 次操作
int reverse(int *A, int lo, int hi)
{
if(lo < hi)
{
swap(A[lo], A[hi]);
reverse(A, lo+1, hi-1);
}
}
//3(hi - lo)/2次操作
int shift(int*A, int n, int k)
{
k %= n;
reverse(A, 0, k-1);//3k/2
reverse(A, k, n-1);//3(n - k)/2
reverse(A, 0 ,n-1);//3n/2
return 3*n;
}
//3n 次操作
int main()
{
int A[] = {1, 2, 3, 4, 5, 6};
shift(A, 6, 2);
for (auto &i : A)
cout << i << ' ' ;
return 0;
}
原地shift算法
最新推荐文章于 2023-11-09 19:58:23 发布