【发布时间】:2012-01-31 01:28:40
【问题描述】:
好吧,我前几天问了一个关于排序的问题。我发现了如何通过对 8 个元素进行排序来证明最少的比较次数是 16,我明白了为什么。但是我的归并排序算法计算了 17 次比较,在我的情况下它是正确的。要合并两个长度分别为 x 和 y 的排序数组,我们需要 (x+y)-1 次比较,因此在合并排序中我们得到 17 次比较。但是必须有 16 次比较才能实现,所以.. 怎么样?我在哪里可以保存那 1 个比较)。
这是一张图片:
谢谢!
【问题讨论】:
-
您说您已经知道“如何证明 ... 是 16”。你的证明应该能够回答这个问题。
-
我的意思是我希望理论上是可能的
-
使用合并排序对 8 个元素进行排序所需的“最少”比较次数小于 16。例如,如果您的两个 4 元素子数组是
[0, 1, 2, 3]和[4, 5, 6, 7],那么合并它们只需要四次比较。在第四次比较之后,第一个子数组为空,您可以复制第二个子数组——不需要进行项目比较。 -
使用基数排序或其他一些您不再需要比较的非比较排序算法。