【发布时间】:2011-08-09 09:24:02
【问题描述】:
很多时候我必须对大量的小列表、数组进行排序。我很少需要对大型数组进行排序。哪种排序算法最快:
- 数组
- (数组)列表
这些类型的大小为 8-15 的元素:
- 整数
- 10-40 个字符的字符串
?
我列出元素类型是因为某些算法执行的比较操作较多,交换操作较少。
我正在考虑合并排序、快速排序、插入排序和外壳排序(2^k - 1 个增量)。
【问题讨论】:
标签: java sorting collections
很多时候我必须对大量的小列表、数组进行排序。我很少需要对大型数组进行排序。哪种排序算法最快:
这些类型的大小为 8-15 的元素:
?
我列出元素类型是因为某些算法执行的比较操作较多,交换操作较少。
我正在考虑合并排序、快速排序、插入排序和外壳排序(2^k - 1 个增量)。
【问题讨论】:
标签: java sorting collections
Arrays.sort(..) / Collections.sort(..) 将为您做出决定。
例如,openjdk-7 implementation of Arrays.sort(..) 具有 INSERTION_SORT_THRESHOLD = 47 - 它对少于 47 个元素的元素使用插入排序。
【讨论】:
除非你能证明这是一个瓶颈,否则内置排序就可以了:
Collections.sort(myIntList);
Arrays.sort(myArray);
【讨论】:
实际上,没有一个通用的答案。除其他事项外,Java 排序算法的性能将取决于比较操作的相对成本,以及(对于某些算法)输入的顺序。如果是列表,还取决于列表的实现类型。
但是@Bozho 的建议是合理的,@Sean Patrick Floyd 的评论也是如此。
跟进
如果您认为性能差异对您的用例来说很重要,那么您应该掌握不同算法的一些实现,并使用您的应用程序需要处理的实际数据对其进行测试。 (如果您还没有数据,现在开始调整应用程序还为时过早,因为排序性能将取决于实际数据。)
简而言之,您需要自己进行基准测试。
【讨论】: