以下是引用kin3z在2017-3-30 11:13:15的发言:
我赞同你的方法,就算用数组来实现,为(O/2):i = n/2+n%2;
i 为循环次数, n 为元素个数,以头尾对调的方式。
我赞同你的方法,就算用数组来实现,为(O/2):i = n/2+n%2;
i 为循环次数, n 为元素个数,以头尾对调的方式。
关键是有时候调换的数据不止2个,有的时候又只有一个,不过调换函数还是要改进一下。
说一下,大体n个元素的排序大体分三步(优化以上算法):
第一步,把n/2个元素移到前面第二个
第二步,把从数列最大值开始减k的连续两个数移到最前面加k+1的地方。如:15678234把82移到1号位置变成82156734再移动次大的,把73移动8和2之间,……这样一共移动(n-1)/2次。
第三步,如果该数列为偶数还需移动一次,就是把最后一个数移到它该去的地方,如87643215把5移动6和4之间。如果是奇数列此步就不用进行。
实现,大家看能不能优化一下,要能像吹版那样最好。
[此贴子已经被作者于2017-3-30 21:22编辑过]