C++之STL中sort函数的内部实现(二)

另外一个版本:概述先进行introsort,基本有序后再使用insertion sort。introsort是改进的quick sort,为了防止最坏情况发生,它使用__lg()函数控制分割恶化的情况。intro sort算法元素个数检查,大于16个才进行后续操作;分割层次检查,分割层次超过指定值就使用heap sort;全部检查通过后使用quick sort,使用median-of-3方法确
摘要由CSDN通过智能技术生成

另外一个版本:

概述

先进行introsort,基本有序后再使用insertion sort。introsort是改进的quick sort,为了防止最坏情况发生,它使用__lg()函数控制分割恶化的情况。

intro sort算法

  1. 元素个数检查,大于16个才进行后续操作;
  2. 分割层次检查,分割层次超过指定值就使用heap sort;
  3. 全部检查通过后使用quick sort,使用median-of-3方法确定枢轴位置;
  4. 对左右半段递归进行intro sort。
  5. 全部内容结束后, 序列已经基本有序,再次调用一次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,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值