C数据结构题目5.18⑤试设计一个算法,将数组A中的元素 A[0..n-1]循环右移k位,并要求只用一个元素 大小的附加存储,元素移动或交换次数为O(n)。 要求实现以下
试设计一个算法,将数组A中的元素A[0]至A[n-1]循环右移k位,并要求只用一个元素大小的附加存储,元素移动或交换次数为O(n). 分析:我们看这个数组123456,循环右移2位。先将数组逆序,654321,交换3次,然后交换前两个,564321,然后右面四个数字逆序,则561234,交换2次,正好是6次,并且在交换数据的时候,只使用了一...
这是《编程珠玑》里的一个例子 分三步: 第一步:把整个数组首尾颠倒(即第一个和最后一个换位,第二个和倒数第二个换等等) 第二步:再把调换后的数组前n-p个数首尾颠倒 第三部:最后把数组末p个数首尾颠倒 可以验证经过上述操作的结果就等于数组循环右移p位,而且每次两个数组元素对调只需要一单位附加存储,共...