【发布时间】:2011-08-12 16:18:39
【问题描述】:
在 Quicksort、MergeSort 和 Binary Insertion Sort 中,是否有过使用其中任何一种而不是另一种的情况?
我知道像快速排序这样的东西在几乎排序的列表上可能会出现问题(但我相信枢轴的随机分配可以消除最坏情况的时间),所以使用 MergeSort 可能会更好。 MergeSort 可能比 QuickSort 使用更多空间,我不完全确定,Merge 可能更适合 LinkedLists。
我猜二进制插入排序更适合较小的列表?如果是这样,是否有使用此阈值的阈值,还是仅留给解释的大小?比如,如果列表大小为 3,我们应该使用二进制插入排序而不是 Quick 还是 Merge?
【问题讨论】:
-
元评论:有一些关于特定情况下的最佳算法的问题,但没有关于一般最佳算法的问题;这可能是一个很好的维基。元元评论:“排序”不再像一个词。
-
同意。 “最佳”问题在很大程度上取决于您的情况。例如:en.wikipedia.org/wiki/Sorting_algorithms
-
好的,谢谢,很抱歉这些愚蠢的问题。但是,说快速排序不是自适应的是什么意思?我已经检查了sorting-algorithms.com/quick-sort,我认为这个词解释得不够清楚。
-
关于哪种排序算法最好的帖子有很多。几乎每个人都会告诉您,这主要取决于您要排序的数据 - 多少,什么类型,是否已经/部分/大部分已经排序等等。这个问题是无法回答的 - 这完全是主观的,任何提供答案的尝试都是猜测。投票结束。
-
我想补充一点,快速排序和归并排序之间最重要的区别是稳定性。合并排序是稳定的,而快速排序则不是。如果稳定性对您的数据很重要 - 在很多情况下很重要! - 那么在许多情况下,合并排序是唯一可行的选择。有趣的是,有很多“什么是最好的算法”问题,但有几个问题没有指出这种差异。
标签: java sorting binary quicksort mergesort