什么时候使用另一种

时间:2011-04-26 00:10:56

标签: java sorting binary quicksort mergesort

在Quicksort,MergeSort和Binary Insertion Sort中,是否有任何一种情况可以使用其中任何一种?

我知道像Quicksort这样的东西在几乎排序的列表上会出现问题(但我相信枢轴的随机分配可以消除最坏的情况时间),所以使用MergeSort可能更好。 MergeSort可能比QuickSort使用更多的空间,我不完全确定并且对于LinkedLists来说Merge可能更好。

我猜二进制插入排序对于较小的列表更好?如果是这样,是否有使用此阈值或者只是解释的大小?比如,如果列表大小为3,我们应该使用二进制插入排序比Quick还是Merge?

2 个答案:

答案 0 :(得分:5)

我假设这是在寻求关于如何用Java进行排序的实用建议。

我的建议是,通常最好使用Arrays.sort(...)并依赖标准实现的启发式方法来决定使用哪种排序算法。如果出现以下情况,您只需要担心:

  • 你知道你将对大型数据集进行排序,
  • 您知道您的数据集适合特殊的排序方法;例如计算排序,或
  • profiling告诉您,使用标准排序方法是性能瓶颈。

(在我的回答中隐含的是,你知道所有关于不同排序算法的特征,如任何好的数据结构教科书中所示.IMO,每个程序员都应该知道这些东西。)

答案 1 :(得分:0)

斯蒂芬斯回答是正确的,但我只是想补充一些东西。如果您查看算法手册,它们将涵盖每种排序方法的效率。有时,如果你知道你的数据会是什么样子,那么特定的排序算法会有一个最好的情况,它比其他算法更好。如果我错了,请纠正我,任何人。