另外一个版本:
概述
先进行introsort,基本有序后再使用insertion sort。introsort是改进的quick sort,为了防止最坏情况发生,它使用__lg()函数控制分割恶化的情况。
intro sort算法
- 元素个数检查,大于16个才进行后续操作;
- 分割层次检查,分割层次超过指定值就使用heap sort;
- 全部检查通过后使用quick sort,使用median-of-3方法确定枢轴位置;
- 对左右半段递归进行intro sort。
- 全部内容结束后, 序列已经基本有序,再次调用一次insertion sort。
代码
inline void sort(RAIterator first, RAIterator last){
if(first != last){
__introsort_loop(first,last,value_type(first),__lg(last-first)*2);
__final_insertion_sort(first,