好吧,几天前我问了一个关于排序的问题。我发现如何通过排序8个元素来证明最少的比较数是16,我理解为什么。但我的合并排序算法计算了17个比较,在我的情况下它是正确的。要合并两个长度为x和y的排序数组,我们需要(x + y)-1比较,因此在合并排序中我们得到17个比较。但它必须有16次比较,所以..怎么样?我在哪里可以保存1比较。)
这是一张图片:
谢谢!
答案 0 :(得分:5)
OP包含一个明确的证据,即在少于17次比较的情况下,8个元素的合并排序是不可能的。仍然可以在16次比较中将8个元素与其他算法进行排序。该算法在D.Knuth的“计算机编程艺术”第3卷第5.3.1章中描述。它被命名为合并插入。
最低数量的比较不会使此算法成为最快的算法。例如,具有19次比较的Batcher odd–even mergesort轻松胜过合并插入,因为它会并行执行大多数比较。
答案 1 :(得分:3)
当你有一个奇数的数字要排序时,你只能获得最少的解决方案。
答案 2 :(得分:1)
通过尝试所有可能的算法,您可以证明16次比较是不够的。你需要和“算法生成算法”。