Java 小集合的最快排序

Java 小集合的最快排序,java,sorting,collections,Java,Sorting,Collections,很多时候,我不得不对大量的小列表、数组进行排序。我很少需要对大型数组进行排序。哪种排序算法最快: 阵列 (数组)列表 尺寸为8-15的此类元件: 整数 10-40个字符的字符串 ? 我之所以列出元素类型,是因为有些算法执行的比较操作较多,交换操作较少 我正在考虑合并排序、快速排序、插入排序和Shell排序(2^k-1增量)。数组。排序(…)/集合。排序(…)将为您做出决定 例如,hasINSERTION\u SORT\u THRESHOLD=47-它对元素少于47个的元素使用插入排序。除

很多时候,我不得不对大量的小列表、数组进行排序。我很少需要对大型数组进行排序。哪种排序算法最快:

  • 阵列
  • (数组)列表
尺寸为8-15的此类元件:

  • 整数
  • 10-40个字符的字符串
?

我之所以列出元素类型,是因为有些算法执行的比较操作较多,交换操作较少

我正在考虑合并排序、快速排序、插入排序和Shell排序(2^k-1增量)。

数组。排序(…)
/
集合。排序(…)
将为您做出决定


例如,has
INSERTION\u SORT\u THRESHOLD=47
-它对元素少于47个的元素使用插入排序。

除非您能证明这是一个瓶颈,否则内置排序是可以的:

Collections.sort(myIntList);

Arrays.sort(myArray);

事实上,没有一个普遍的答案。除此之外,Java排序算法的性能将取决于比较操作的相对成本,并且(对于某些算法)取决于输入的顺序。对于列表,它还取决于列表实现类型

但是@Bozho的建议是合理的,正如@Sean Patrick Floyd的评论一样


跟进

如果您认为性能差异对于您的用例来说非常重要,那么您应该掌握一些不同算法的实现,并使用您的应用程序需要处理的实际数据对它们进行测试。(如果您还没有数据,那么现在就开始优化应用程序还为时过早,因为排序性能将取决于实际数据。)


简而言之,您需要自己进行基准测试。

准确地说,对于小型集合,效率上的差异在现代机器上几乎不明显。我希望答案是“没关系”。当服务器每秒处理几十个请求,每个请求处理几十个排序时,这一点很重要。合并排序会产生大量的分配,从而使垃圾收集器的工作更加困难。这是Sun/Oracle Java 6实现中的插入排序阈值吗?如果不是的话,它对我没有什么帮助。您可以查看Java6代码,了解阈值到底是多少。但是这个算法是很久以前指定的,所以我不希望有什么大的区别。