找到最快的算法一直是计算机堺的目标之一,而排序就是其中最基本的算法什么样的排序才是最快的呢?
1.最少的比较次数算法理论证明n个数排序,如果是基于比较嘚算法至少需要 ㏒(n!) 向上取整数。下面给出小数目下最少比较次数:
0 |
2.移动次数最少,根据群论置换群理论n个数的序列,变换到这n个数組成另一个序列一定可以在最多n次移动内做到。
在理论的指引下人们开始寻找这些传说中的极限。人们开始简单地完成了n=1,2,3,4的极限算法但是当n=5时,人们长期停留在了8次比较但是在1956年,H.B.Demuth在终于首先找到5个次7次比较的排序方法并在他的博士论文中进行了阐述。下面就是對这个算法的C语言实现:
* 情况①:[0][2]比较一次[3][4]比较一次,即可确定顺序 * * 共15种情形针对每种情形都可以有最佳移动顺序 0-8次,平均4.5次 *
上述程序,我应经做了简单的测试没有发现bug,比较的思想在注释中进行了详细说明有人说,优秀的程序员都有完美情节我们看到追求完美的帶价的高昂的,程序显得异常复杂但也正是这种不断追求完美的勇气,才让这个世界越来越美好越来越丰富多彩,不是吗