在Quicksort,MergeSort和Binary Insertion Sort中,是否有任何一种情况可以使用其中任何一种?
我知道像Quicksort这样的东西在几乎排序的列表上会出现问题(但我相信枢轴的随机分配可以消除最坏的情况时间),所以使用MergeSort可能更好。 MergeSort可能比QuickSort使用更多的空间,我不完全确定并且对于LinkedLists来说Merge可能更好。
我猜二进制插入排序对于较小的列表更好?如果是这样,是否有使用此阈值或者只是解释的大小?比如,如果列表大小为3,我们应该使用二进制插入排序比Quick还是Merge?
答案 0 :(得分:5)
我假设这是在寻求关于如何用Java进行排序的实用建议。
我的建议是,通常最好使用Arrays.sort(...)
并依赖标准实现的启发式方法来决定使用哪种排序算法。如果出现以下情况,您只需要担心:
(在我的回答中隐含的是,你知道所有关于不同排序算法的特征,如任何好的数据结构教科书中所示.IMO,每个程序员都应该知道这些东西。)
答案 1 :(得分:0)
斯蒂芬斯回答是正确的,但我只是想补充一些东西。如果您查看算法手册,它们将涵盖每种排序方法的效率。有时,如果你知道你的数据会是什么样子,那么特定的排序算法会有一个最好的情况,它比其他算法更好。如果我错了,请纠正我,任何人。