Arrays.sort() - 原始和两种不同的策略。要排序的复杂数据类型

时间:2014-06-11 21:38:10

标签: java arrays sorting data-structures

Arrays正在使用方法DualPivotQuicksort对原始数据类型进行排序, 和复杂类型分开 - 使用merge-sort。 (如果输入大小很小,则插入排序)。

DualPivotQuicksort仍然在大输入尺寸上使用merge-sort,但是,它在一系列较小的输入尺寸上使用双快速排序。

我想知道的是 - 为什么在对原始类型和非原语类型进行排序时的策略存在差异?

算法的性能很大程度上取决于输入大小 - 而不是数据类型。 在基元上调用compareTo()而不是简单的幅度比较(>,<,==)不会 在内存中烧掉额外的空间(因此不会因为内存空间而减慢绝对时间性能),这在运行时会很大。

为什么Arrays.sort()方法对原始数据类型使用不同的排序策略, 对于复杂的数据类型?

TIA。

1 个答案:

答案 0 :(得分:9)

因为排序引用类型保证为stable,而排序原语不需要(如此快速排序,可以使用非稳定排序算法;另一方面合并排序实际上是稳定的)。另请注意quicksort is generally more optimal than mergesort(另请参阅this),这解释了在对基元进行排序时利用它的原因。

来自Arrays.sort

  

此类保证稳定:由于排序,相同的元素不会被重新排序。