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