整数数组,其中合并排序比快速排序快

时间:2017-11-26 19:07:38

标签: c++ arrays sorting

我正在将合并排序和快速排序与整数数组进行比较以查看哪一个更快排序数组我已经有一个数组设置快速排序比合并排序更快但我无法弄清楚如何有一个合并排序比快速排序更快。有人可以给我一个例子吗? 数组不一定非常大,可以像20那样小。

1 个答案:

答案 0 :(得分:2)

这两种排序已经过数学分析,结果表明Merge Sort在大多数情况下可能会更快。

O(n lg n)

Quicksort分析显示范围,最佳案例场景等于合并排序时间:

O(n lg n) (best)
O(n²) (worst)

我认为维基百科的分析很好地解释了为什么一个人最终比另一个人更快。正如Kenny Ostrom对你的问题所评论的那样,你应该做的是计算比较的数量,如果你的实现使用算法并且通过优化你不知道有多少比较和分支将要发生,这不容易做到一旦你运行代码(即较新的处理器有条件MOV指令意味着你可以完全避免分支!)

然而,如果你正在寻找一个纯粹的分析,那么速度本身不是一个问题(即你不需要计时功能),而只是计算你进行比较的次数和交换两个条目的次数。这为您提供了特定对象数组的时间,无论对象是什么(尽管比较函数可能非常昂贵:想象一下,在对它们进行排序之前比较需要一些OCR工作的两个图像...)

为什么在进行分析时速度不是问题?

如果您阅读维基百科上的合并排序算法,您会注意到他们提到的事实是,要达到最佳情况,您需要正确实施该算法。因此,如果您自己编写或使用未实现的版本,那么您可能会发现Merge Sort比Quicksort慢。