很多时候我必须对大量的小列表,数组进行排序。我需要对大型数组进行排序是非常罕见的。哪种是排序最快的排序算法:
这些类型的大小为8-15个元素:
我列出了元素类型,因为有些算法会进行更多的比较操作和更少的交换操作。
我正在考虑合并排序,快速排序,插入排序和Shell排序(2 ^ k - 1增量)。
答案 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的评论一样。
<强>后续强>
如果您认为性能差异对您的用例非常重要,那么您应该掌握一些不同算法的实现,并使用您的应用程序需要处理的实际数据来测试它们。 (如果您还没有数据,现在开始调整应用程序还为时过早,因为排序性能取决于实际数据。)
简而言之,您需要自己进行基准测试。