设a[0:n-1]是有n个元素的数组,k(O≤k≤n-1)是一个非负整数。试设计一个算法将子数组 a[0:k-1]与a[k:n-1]换位。要求:算法在最坏情况下耗时O(n),且只用到O(1)的辅助空间。
#include <iostream>
using namespace std;
// [begin, end)
void reverse(int a[], int begin, int end)
{
while (begin < end)
{
swap(a[begin], a[end - 1]);
begin++;
end--;
}
}
void transposition(int a[], int n, int k)
{
reverse(a, 0, k);
reverse(a, k, n);
reverse(a, 0, n);
}
int main()
{
int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int n = 9;
int k = 3;
transposition(a, n, k);
for (int i = 0; i < n; i++)
{
cout << a[i] << ' ';
}
// 4 5 6 7 8 9 1 2 3
return 0;
}