java - 什么时候对另一个使用排序

标签 java sorting binary quicksort mergesort

在 Quicksort、MergeSort 和 Binary Insertion Sort 中,是否存在需要使用其中任何一种的情况?

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

我猜二进制插入排序更适合较小的列表?如果是这样,使用这个是否有阈值,或者大小是否只是由解释决定?比如,如果列表的大小为 3,我们应该使用二进制插入排序而不是快速排序还是合并排序?

最佳答案

我假设这是在寻求有关如何在 Java 中对内容进行排序的实用建议。

我的建议是,通常最好使用 Arrays.sort(...) 并依靠标准实现的试探法来决定使用哪种排序算法。你只需要担心这个如果:

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

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

关于java - 什么时候对另一个使用排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5784610/

相关文章:

c++ - 读取 fopen 打开的二进制文件 ("ab") (add,binary)

java - 从方法 java 返回 "constant"值

java - 我有一个类需要访问其他 3 个类的数据

C++读取PDF文件

perl - 如何通过多个键对 perl 哈希进行排序?

algorithm - 多重二进制搜索和比较算法的复杂性

objective-c - iPhone 4 iOS 5 如何以编程方式将字符串转换为其二进制字符代码?

java - 为什么 for-each 循环不允许增量整数?

java - 添加一个方面来捕获异常并返回 null

java - 排序 ListView Java