在 Quicksort、MergeSort 和 Binary Insertion Sort 中,是否存在需要使用其中任何一种的情况?
我知道像 Quicksort 这样的东西在几乎排序的列表上可能会出现问题(但我相信主元的随机分配可以消除最坏情况的时间),所以使用 MergeSort 可能更好。 MergeSort 可能比 QuickSort 使用更多的空间,我不完全确定,Merge 可能更适合 LinkedLists。
我猜二进制插入排序更适合较小的列表?如果是这样,使用这个是否有阈值,或者大小是否只是由解释决定?比如,如果列表的大小为 3,我们应该使用二进制插入排序而不是快速排序还是合并排序?
最佳答案
我假设这是在寻求有关如何在 Java 中对内容进行排序的实用建议。
我的建议是,通常最好使用 Arrays.sort(...)
并依靠标准实现的试探法来决定使用哪种排序算法。你只需要担心这个如果:
- 您知道您将对庞大的数据集进行排序,
- 您知道您的数据集适用于特殊的排序方法;例如计数排序,或
- 分析告诉您,您对标准排序方法的使用是性能瓶颈。
(在我的回答中隐含的是,你知道所有关于不同排序算法的特性,正如任何好的数据结构教科书中所介绍的那样。IMO,每个程序员都应该知道这些东西。)
关于java - 什么时候对另一个使用排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5784610/