【发布时间】:2014-01-27 20:12:54
【问题描述】:
为什么我们总是使用快速排序?或任何特定的排序算法??
我在我的电脑上尝试了一些使用快速、合并、堆、闪存排序的实验
结果:-
排序算法:以纳秒为单位的时间 -> 以分钟为单位的时间
快速排序时间:135057597441 -> 2.25095995735
Flash 排序时间:137704213630 -> 2.29507022716667
合并排序时间:138317794813 -> 2.30529658021667
堆排序时间:148662032992 -> 2.47770054986667
在内置函数中使用java
long startTime = System.nanoTime();
给定时间以纳秒为单位,如果我们将它们转换为 20000000 个随机整数数据的秒数,并且 java 中的最大数组大小为 2147483647,那么它们之间几乎没有任何区别。如果我们使用就地算法,那么可能会有 1 到 1 的差异2 分钟直到最大数组大小。
如果差异太小,我们为什么要关心??
【问题讨论】:
-
好吧,对于初学者来说,sort stability 是有区别的。
-
这是 one 实现的 one 基准。此外,“我们”并不“总是”使用快速排序;例如 Python 中的标准排序算法是 Timsort,这是一种经过高度修改的归并排序。
-
Mergsort [变体] 在标准库/API 中似乎比快速排序更常见。我在学校离开了快速排序 - 并且更喜欢合并排序的一致保证和稳定性(提示:合并排序与快速排序的 worse 情况是什么?)。另外,请查看梳状排序。
-
整数的范围是多少?
标签: algorithm