我正在浏览Java中用于排序的Comparable和Comparator接口。我了解了它们如何工作的基本知识。
我感兴趣的是它们的内部工作方式,即排序实际上是如何在内部进行的。
我假设compare / compareTo方法返回的正,负或零值将作为参数传递给另一个Sort方法。
我需要知道内部使用哪种排序方法或正在使用哪种排序,任何文章或代码都将有所帮助。
答案 0 :(得分:3)
这取决于您调用哪种排序方法,但是通常:这是Java的实现细节,有意不向用户公开。
在Oracle Java 8上,我可以看到原语排序使用了Dual-Pivot Quicksort,Mergesort和InsertionSort的某种邪恶组合,具体取决于数组(在算法中的任何点)是否是<386个元素,<47个元素和/或是否确定(启发式)“几乎已排序”。
另一方面,对象的分类使用Tim Peters的Python排序算法,当算法中任意点的数组为<32时,使用mini-Timsort;如果标志java.util.Arrays.useLegacyMergeSort
为true,则使用Mergesort。 / p>
[edit] Arrays.sort
等于Collections.sort
(如果包含对象数组)。