函数 void rcr(int a[] , int n,int k) 的功能是:将数组 a 中的元素 a[0] ~ a[n-1] 循环向右平移 k 个位置。 为了达到总移动次数不超过 n 的要求,每个元素都必须只经过一次移动到达目标位置。在函数 rcr 中用如下算法实现:首先备份 a[0] 的值,然后计算应移动到 a[0] 的元素的下标 p ,并将 a[p] 的值移至 a[0] ;接着计算应移动到 a[p] 的元素的下标 q ,并将 a[q] 的值移至 a[p]; 依次类推,直到将 a[0] 的备份值移到正确位置。 若此时移动到位的元素个数已经为 n ,则结束;否则,再备份 a[1] 的值,然后计算应移动到 a[1] 的元素的下标 p ,并将 a[p] 的值移至 a[1] ;接着计算应移动到 a[p] 的元素的下标 q ,并将 a[q] 的值移至 a[p]; 依次类推,直到将 a[1] 的备份值移到正确位置。 若此时移动到位的元素个数已经为 n ,则结束;否则,从 a[2] 开始,重复上述过程,直至将所有的元素都移动到目标位置时为止。 例如,数组 a 中的 6 个元素如下图 (a) 所示,循环向右平移 2 个位置后元素的排列情况如图 (b) 所示。 41 25 38 47 65 76 65 76 41 25 38 47 a[0] a[1] a[2] a[3] a[4] a[5] a[0] a[1] a[2] a[3] a[4] a[5] (a) (b)