【发布时间】:2011-10-02 18:20:53
【问题描述】:
如果数组长度小于某个阈值,Arrays.java 中的 Java 6 合并排序实现使用插入排序。该值被硬编码为 7。由于算法是递归的,因此对于大型数组,这最终会发生很多次。规范的 merge-sort algorithm 没有这样做,只是一直使用合并排序,直到列表中只有 1 个元素。
这是优化吗?如果是这样,它应该如何提供帮助?为什么7?插入排序(甚至是 <=7 事物)显着增加了对大型数组进行排序所需的比较次数 - 因此会增加 compareTo() 调用速度较慢的排序的成本。
(x轴为size of array,y轴为# of comparisons,对于INSERTIONSORT_THRESHOLD的不同值)
【问题讨论】:
-
这张图的来源是什么?您似乎没有任何评论地展示它
-
我通过对一个对象数组进行排序来制作这个图表,这些对象计算调用 compareTo 的次数并改变 INSERTIONSORT_THRESHOLD。
-
值得注意的是Java7还有Timsort,这是Tim Peters为python开发的混合merge-insert。 download.java.net/jdk7/docs/api/java/util/…