数组的循环右移K位算法,仅使用一个附加的空间,交换次数或元素移动时间复杂度为O(n);
/*步骤分为三步:(K=2)
1.将第 1 位至第 N-K 位进行反转;1,2,3, 4,5->3,2,1, 4,5
2.将第 N-K+1 位至第 N 位进行反转;3,2,1, 4,5->3,2,1, 5,4
3.将整个第 1 位至第 N 位进行反转;3,2,1,5,4->4,5,1,2,3
最终即可实现 循环右移 K 位的算法;*/
void Reverse(int start, int end, int* B)//逆置函数
{
int i = start, j = end, temp = 0;//附加空间
while (i < j)
{
temp = B[i];
B[i] = B[j];
B[j] = temp;
j--;
i++;
}
}
void Exchange(int Num,int k,int* B)//生成函数
{
k=k%Num;
Reverse(0, Num - k - 1, B);//注意传参时一维数组下标由0开始
Reverse(Num-k, Num-1, B);
Reverse(0, Num - 1, B);
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。