stl源码学习

本文深入探讨了一种基于“滚雪球”思想的高效排序算法,该算法利用多个辅助列表(ladder)与主列表(floor)进行元素交换与合并,以实现快速排序。文中详细解释了算法的工作原理、实现细节以及复杂度分析,同时强调了其在实际应用中的优势与局限。此外,文章还涉及了复杂数据结构的应用,旨在为读者提供全面的技术视角。
摘要由CSDN通过智能技术生成

template参数推导,智能推到参数的类型,不能推导返回值。

原生指针也是一种迭代器,支持* ,->,++等操作

stl中的sort方式,只对能够randomaccess的迭代子。对于list slist这样的迭代子的排序方法,是单独提供的。

对于list,简单的想法就是通过不断merge操作,实现排序,保证效率,则每次merger的list大小尽量相等。

所以伪代码:

 sort() {

      list ladder[64];

      list floor;

      int top_ladder = 0;

      while (!empty()) {

          floor.splice(floor.begin(), this, begin()) //获取一个元素到floor中

          //开始merge历程

         int i=0;

         while(i < top_ladder&& !ladder[i].empty()) {

           floor.merge(ladder[i]);

           i++;

         }

         floor.swap(ladder[i]);

         if(i==top_ladder)topladder++;

      }

     for (i=0;i<top_ladder-2;i++){

     ladder[i+1].merge(ladder[i])

     }

}

这个算法的思想,就是“滚雪球”, 每个ladder上能够放2^n大小的雪球,每次从floor往上滚,“滚”其实就是merge,当滚不了了(下一个ladder为空),就不滚了。

这样,最后,将各个ladder上雪球,无条件滚到最后,就是最后的结果了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值