STL源码——list sort:归并排序的非递归实现

由于STL中提供的sort算法是用在RandomAccessIterator上的,而list迭代器不具备随机访问的特性,所以对list进行排序不能使用algorithm中的sort算法,而应该使用list的成员函数sort。对list进行排序,最直接的想法就是用MergeSort,但是每次找中点就需要O(n),可能考虑到这点,成员函数sort并没有采用这种方式实现,而是用了非递归版的MergeSort,将待归并的子序列先保存下来,感觉有点以空间换时间的意思。(更正!由于list链表的特殊性,在进行swap和merge并没有使用额外的空间,所以最多只是牺牲了常数个list结构的空间,而元素本身并没有占用多余的空间。所以并没有牺牲空间)

主要想法就是,将已经有序的子序列先保存下来,然后再一一进行merge。那到底有多少个子序列需要merge呢?每个子序列又如何确定呢?虽然是非递归版MergeSort,但本质思想是一样的,子序列也是由一系列更小的子序列merge而来的。可以将list的长度len表示成二进制形式,

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值