Jdk1.6 Source中Arrays.sort(long)等对基本类型的排序

使用Jon L. Bentley and M. Douglas McIlroy's "Engineering a Sort Function", Software-Practice and Experience, Vol. 23(11) P. 1249-1265 (November 1993).

该算法在大多数数据集上能避免O(n^2)的退化,保证O(nlogn)性能。

改进:

1. 对于小数组(len<7), 使用插入排序算法

2.len=7, pivot= mid = off+ (len>&gt;1) 中间位置

3. 7<len&lt;=40, pivot= med3(off, len-1, mid)取三个数的中间值

4.len>40, 将len平分8份,取9个点的中间值

====================================================================

关于排序算法的优化还有很多, 常用的是

1.利用存储子任务的栈消除递归

2.三中值设定pivot

3.小数组使用插入排序(效率增加20%~25% normal)

4.将大的子数组先压入栈,可以使小的数组先被解决,从而最小化栈的总大小

5.使用内观排序IntroSort,监视递归深度,若深度超过logn级,则转换成堆排序(C++STL的SGI实现),因为堆排序可以保证最坏O(nlogn)

《Algorithm In a Nutsbell》