我正在查看grepcode上java.util.ArrayList的sort()方法的源代码。他们似乎对小数组(大小 < 7)使用插入排序,对大数组使用合并排序。我只是想知道这是否会产生很大的不同,因为它们仅对大小 < 7 的数组使用插入排序。在现代机器上几乎不会注意到运行时间的差异。
我在科门读过这个:
尽管合并排序在 O(n*logn) 最坏情况下运行,而插入排序在 O(n*n) 最坏情况下运行,插入排序中的常数因子可以使其在实践中更快地处理许多机器上的小问题. 因此,当子问题变得足够小时,通过在合并排序中使用插入排序来粗化递归的叶子是有意义的。
如果我会为我需要的某些组件设计排序算法,那么我会考虑在运行时间的差异(与合并排序相比)变得明显之前使用插入排序来获得更大的大小(可能高达大小 < 100)。
我的问题是达到尺寸 < 7 的分析是什么?