最快的小型收藏品

时间:2011-08-09 09:24:02

标签: java sorting collections

很多时候我必须对大量的小列表,数组进行排序。我需要对大型数组进行排序是非常罕见的。哪种是排序最快的排序算法:

  • 阵列
  • (阵列)列表

这些类型的大小为8-15个元素:

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

我列出了元素类型,因为有些算法会进行更多的比较操作和更少的交换操作。

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

3 个答案:

答案 0 :(得分:13)

Arrays.sort(..) / Collections.sort(..)将为您做出决定。

例如,openjdk-7 implementation of Arrays.sort(..)INSERTION_SORT_THRESHOLD = 47 - 它对少于47个元素的人使用插入排序。

答案 1 :(得分:1)

除非你能证明这是一个瓶颈,否则内置的排序很好:

Collections.sort(myIntList);

Arrays.sort(myArray);

答案 2 :(得分:1)

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

但是@ Bozho的建议是合理的,就像@Sean Patrick Floyd的评论一样。


<强>后续

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

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