【发布时间】:2015-11-26 20:23:55
【问题描述】:
我正在使用 JDK-8 (x64)。对于Arrays.sort(原语),我在 Java 文档中找到了以下内容:
排序算法是 Vladimir Yaroslavskiy、Jon Bentley 和 Joshua Bloch 的 Dual-Pivot Quicksort。`
对于Collections.sort(对象),我找到了这个“Timsort”:
这个实现是一个稳定的、自适应的、迭代的mergesort ...这个实现将指定的列表转储到一个数组中,对数组进行排序,然后遍历列表重置数组中对应位置的每个元素。
如果Collections.sort 使用数组,为什么不直接调用Arrays.sort 或使用双轴QuickSort?为什么要使用合并排序?
【问题讨论】:
-
这是基本数组的 javadoc - 对象数组使用 meregsort 排序。
-
mergesort 总是给你 nlogn,而快速排序有时可能会给出 nlogn2,通常数组大小不是那么大,但集合很容易达到数百万个条目,所以冒着 nlogn2 的风险是不值得的。 nlogn2 我的意思是 n 的平方
-
O(n^2) 的快速排序是最坏的情况。在实践中它更快
-
但是在制作 api 时不能忽略这些情况
-
This link 非常相关。
标签: java arrays sorting collections java-8