为什么 Java 6 Arrays#sort(Object[]) 从 mergesort 更改为插入排序来表示小型数组?
Java 6 的 mergesort 实现在数组长度小于某个阈值时使用插入排序。此值硬编码为 7。由于该算法是递归的,因此对于大型数组,这种情况最终会发生很多次。规范的合并排序算法不会这样做,只是一直使用合并排序,直到列表中只有 1 个元素。Arrays.java
这是优化吗?如果是这样,它应该如何帮助?为什么?插入排序(甚至是事物)大大增加了对大型数组进行排序所需的比较次数 - 因此会增加调用缓慢排序的成本。7
<=7
compareTo()
(x 轴为 ,y 轴为 ,适用于size of array
# of comparisons
INSERTIONSORT_THRESHOLD
)