Mar*_*nik 10
算法不同的地方是它们的典型案例行为,这就是插入排序是最糟糕的情况之一.在另一方面,对于非常小的集合(N≈ñ 2)插入排序的简单胜.
Java的算法选择规则首先选择QuickSort,并且由于特定的限制而仅返回其他内容.QuickSort,即,是一种不稳定的排序,因此仅适用于基元的排序.对于参考类型,TimSort用于OpenJDK 7(以前的MergeSort).
这不是特别的:
Arrays.java 的排序方法对基元数组使用快速排序,对对象数组使用合并排序。
为什么Java的Arrays.sort方法对不同的类型使用两种不同的排序算法?
另外,根据文档:
例如,sort(Object[]) 使用的算法不必是归并排序,但它必须是稳定的。
javadoc 中的另一句话:
这种排序保证是稳定的:相同的元素不会因排序而重新排序。
实现说明:此实现是一种稳定、自适应、迭代的归并排序,当输入数组部分排序时,需要的比较次数远少于 n lg(n),而当输入数组随机排序时,它提供传统归并排序的性能。如果输入数组接近排序,则实现需要大约 n 次比较。临时存储要求各不相同,从几乎排序的输入数组的小常量到随机排序的输入数组的 n/2 对象引用。
该实现在其输入数组中同等地利用升序和降序,并且可以在同一输入数组的不同部分中利用升序和降序。它非常适合合并两个或多个已排序的数组:只需连接数组并对结果数组进行排序即可。
该实现改编自 Tim Peters 的 Python 列表排序 (TimSort)。