C++ STL list 成员函数 sort算法分析

这篇博客探讨了C++ STL list的sort成员函数,通过分析源码和实验,揭示了其实现方式是归并排序。作者通过断点跟踪微软的实现,详细解释了排序过程,建议在理解复杂算法时,可以通过编写测试程序并调试来帮助理清思路。
摘要由CSDN通过智能技术生成

最近在读《STL源码剖析》,颇有收获。当看到list结构的排序方法sort时,发现侯捷先生点到为止,说采用的是快速排序,也没有继续说明。我心存疑虑,怎么看这个代码都不像快排。

 

template <class _Tp, class _Alloc> template <class _StrictWeakOrdering>
void list<_Tp, _Alloc>::sort(_StrictWeakOrdering __comp)
{
  // Do nothing if the list has length 0 or 1.
  if (_M_node->_M_next != _M_node && _M_node->_M_next->_M_next != _M_node) {
    list<_Tp, _Alloc> __carry;
    list<_Tp, _Alloc> __counter[64];
    int __fill = 0;
    while (!empty()) {
      __carry.splice(__carry.begin(), *this, begin());
      int __i = 0;
      while(__i < __fill && !__counter[__i].empty()) {
        __counter[__i].merge(__carry, __comp);
        __carry.swap(__counter[__i++]);
      }
      __carry.swap(__counter[__i]);        
      if (__i == __

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值