排序算法对结果的唯一要求是操作数满足全序关系:如果a≤b且b≤c则a≤c(传递)。对于a或b,a≤b或b≤a(完整性)。这个问题可以用信息论来回答。我从1到5挑一个数字让你猜,每一轮你可以问我一个问题,我的回答是“是”或“不是”(1或0),那么你至少需要几轮才能保证猜对数字?一个比较符合游戏精神的是从你的幸运数字开始猜(比如我的是7)然后问我“是X吗?”逐个。也许你足够幸运,在一轮中猜对了。但在最坏的情况下,可能需要5轮,所以你的答案应该是“至少5轮”(其实你只需要至少一次就可以猜到“可能”,但是为了“保证”猜出来,你要找借口说5),换句话说,这种猜测方法的最优下界是5。(平均表现是1×1/5+2×1/5+…+5×1/5=(1+...+5)/5=3)但是因为你知道二分法,你会问“它比Big3好吗?”......无论我选择什么数字,它只需要3轮。除法显然是一个更好的策略,那有什么好用的呢?用信息论来理解:最大熵。英文版的维基词条有一个粗略的解释:Comparison_sort,最小次数为log(5!)=6.91,如果四舍五入,是7。决策树是这样的:如果我们用mergesort,比较的次数是O(nlogn),因为mergesort是全局最优解,但是在局部,merge并不能保证是最优的。附上一张gif快速排序:产地其他链接:http://justjavac.com/other/2013/04/10/why-any-sort-algorithm-based-on-the-comparison-of-the-five-elements-are-needed-7-times.html
