整数阵列合并排序比QuickSort快



我正在比较合并排序和快速排序与整数数组,以查看哪个在对数组进行排序时更快,我已经设置了一个数组但是我不知道如何将合并排序比快速排序更快。有人可以给我一个这样做的例子吗?阵列不一定要大,它的尺寸可能很小,例如20。

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

O(n lg n)

QuickSort分析显示了一个范围,最好的情况方案等于合并排序时间:

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

我认为Wikipedia分析很好地解释了为什么一个人最终比另一个要快。正如肯尼·奥斯特罗姆(Kenny Ostrom)评论了您的问题一样,您应该做的是计算比较数量,如果您实施使用算法,并且通过优化,您从来都不知道会发生多少比较和分支,一旦您就会发生多少个比较和分支机构。运行代码(即,新处理器具有有条件的MOV指令,这意味着您可以完全避免分支!)

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

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

如果您在Wikipedia上阅读了合并排序算法,您会注意到他们提到的事实是,要达到正确实现算法所需的最佳情况。因此,如果您自己编写或使用未实现的版本,那么您可能会发现合并排序比QuickSort慢。

最新更新