为什么将插入排序与合并排序一起使用?

时间:2018-11-27 10:55:33

标签: algorithm sorting mergesort insertion-sort

我看到一些解释和一些库,例如Java,其中低于指定数量的阈值元素插入排序与合并排序一起使用。其原因是因为插入排序也很稳定。但是,气泡排序或“蒂姆排序”也很稳定,当然可能还有其他排序方法。我不知道为什么要使用插入排序来代替其他代码。

4 个答案:

答案 0 :(得分:1)

插入排序通常比其他简单的二次排序方法快一点-部分原因是使用元素链移位而不是完全交换。

对于小型子数组而言,简单排序通常比TimSort等更复杂的方法更快

答案 1 :(得分:1)

显然是“因为它对于小型阵列更快”。

之所以更快,是因为CPU无法预测答案会导致巨大的惩罚。这些被称为管道停顿。插入排序可最大程度地减少管道停顿。

高效的排序包含很多“ /”或“或”的问题,甚至有可能以任何一种方式得出结果。因此,例如,快速排序中一半的比较将被预测为错误。因此,例如,对于100个元素,我们预计需要进行650次比较(实际上平均为647.85,有关公式,请参见http://ac.informatik.uni-freiburg.de/lak_teaching/ws08_09/average-case/average_case.pdf的第12页),其中325个管道失速平均被预测为错误。

插入排序有很多预测,但是它们的结果非常可预测-我们还没有达到插入点。因此,使用100个元素,我们将平均进行2500次比较,但其中只有99个是管道停顿。如果流水线停滞的成本远远超过10次比较,那将使插入排序更快。根据{{​​3}},您可以看到抓取要比较的数字大约是0.5 ns,分​​支预测错误(又称管道停顿)大约是5 ns,因此相差大约10倍。这就是为什么100个元素是在实践中,插入排序比快速排序要快。

气泡排序在此指标上效果不佳。我们都有比较的二次数和管道停顿的二次数。但这并不奇怪。气泡分类的主要目的是制造一个方便的出气筒,因为它易于编码且吸得很厉害。

答案 2 :(得分:0)

不是100%,但是如果我记得正确的话,这与以下事实有关:插入排序理论上至少比冒泡排序少拍几率。

答案 3 :(得分:0)

排序算法设计人员对少量元素进行基准替代排序,并将其集成为有效元素的引导程序。