SGI STL list::sort() 的实现

今天翻看候jj的STL 源码剖析,看到list的sort算法,跟我之前所认为的list的排序算法有比较大的出入,特拿来品味一番。

ExpandedBlockStart.gif 源码
 1  template < class  T,  class  Alloc  =  alloc >
 2 
 3  void  list < T, alloc > ::sort()
 4  {
 5  if (node -> next  ==  node  ||  (link_type)( * node -> next) -> next  ==  node)
 6          {
 7               return ;
 8          }
 9 
10          list < T, Alloc >  carry;
11          list < T, Alloc >  counter[ 64 ];
12           int  fill  =   0 ;
13           while  ( ! empty())
14          {
15              carry.splice(carry.begin(),  * this , begin());
16               int  i  =   0 ;
17               while (i  <  fill  &&   ! counter[i].empty())
18              {
19                  counter[i].merge(carry);
20                  carry.swap(counter[i ++ ]);
21              }
22              carry.swap(counter[i]);
23               if (i  ==  fill)
24                   ++ fill;
25          }
26 
27           for ( int  i  =   1 ; i  <  fill; i ++ )
28          {
29              counter[i].merge(counter[i  -   1 ]);
30          }
31          swap(counter[fill  -   1 ]);
32          
33  }

 

 

转载于:https://www.cnblogs.com/MatrixBandit/archive/2010/01/12/1644522.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值