TransformArray(array, n): // n是题目中的n,array的大小是2n 1. for s =0 to n: 2. if s 是一个轮换组的第一个元素下标: 3. j <- s 4. tmp <- array[j] 5. do: 6. j <- j转换后的下标 7. swap(tmp, array[j]) 8. while j != s
int Trans(int x, int n) ...{ if (x < n) ...{ return (x <<1) +1; }else...{ return (x-n) <<1; } } bool IsFirstOfAGroup(int s, int n) ...{ int i = s; do...{ i = Trans(i, n); if (i < s) returnfalse; }while (i != s); returntrue; } template <typename T> void TransArratStartFrom(vector<T>& array, int s, int n) ...{ T tmp = array[s]; int j = s; do...{ j = Trans(j, n); swap(array[j], tmp); }while (j != s); } template <typename T> void TransWholeArray(vector<T>& array, int n) ...{ for (int s =0; s < n; ++s) ...{ if (IsFirstOfAGroup(s, n)) TransArratStartFrom(array, s, n); } }