問題能夠轉化爲將數組內前 n 個元素進行逆置,再將後(n-p)個元素逆置,最後將整個數組逆置數組
void Reverse(int A[],int pos1,int pos2){ // 將A[pos1]與A[pos2]的值互換 while(pos1 < pos2){ A[pos1] += A[pos2]; A[pos2] += A[pos1]; A[pos1] += A[pos1] - A[pos2]; pos1++; pos2--; } } void Converse(int A[],int n,int p){ p = p % n; //等價於右移(n-p)個位置 reverse(A,0,p-1); reverse(A,p,n-1); reverse(A,0,n-1); }