我正在浏览用于在 Java 中进行排序的 Comparable 和 Comparator 接口。
我感兴趣的是他们的内部工作,即排序实际上是如何在内部进行的。
我假设比较/比较方法返回的正值、负值或零值将作为参数传递给另一个 Sort 方法。
我需要知道内部的排序方法是什么,或者正在使用哪种排序,任何文章或代码都会有所帮助。
这取决于您调用的排序方法,但一般来说: 这是 Java 的实现细节,故意不向用户公开。
通过Oracle Java 8,我可以看到原语的排序使用双枢轴快速排序,合并排序和插入排序的邪恶组合,这取决于数组(在算法中的任何点)是<386个元素,<47个元素和/或它是否确定它(启发式地)"几乎排序"。
另一方面,对象的排序使用Tim Peters的Python排序算法,当算法中任何一点的数组为<32时,该算法使用mini-Timsort,如果标志java.util.Arrays.useLegacyMergeSort
为真,则使用Mergesort。
[编辑] Arrays.sort
等于 Collections.sort
if 对象数组。