在空间复杂度O(1)的条件下实现归并排序[原创]

第一:对一个L1,L2,的子序列,分别长度为,m,n.可以用min(m,n)的空间协助进行归并排
序,且仅对该额外空间的值得顺序有影响。详细参见sara basse的那本算法书.


第二:对于一个已经排序的L1,L2,总长度假定为u,为了方便分析,假定L1的长度=L2的长度=u/2,切分成sqrt(u)的个
块,每个快有sqrt(u)个数,然后对L1,的最后一块和L2的最后一块归并,L2的最后一
块存放全部数据的最大数据,同时也是利用L2的这个最后一块作为下面归并的额外空间。

第三:对剩余的块(除L2最后一块,那块存放最大元素的那块),按照块的最小元素排序,之后依次归并相邻块。

第四:对最后一块进行排序,因为他作为额外空间,参与了两两相邻的块排序,自己的顺序不能保证,所以最后还要排序一次。

 

这种方法的正确性可以这样来简单解释

由于最后的分块都是从L1或者L2中切下来的。

那么第i块,第i+1块和第i+2块(如果按照最小元素排序的话)

不妨假定第i块来自L1,第i+1块来自L2。(i,i+1,i+2,是切下来后的编号,例如例子中第1块是1 4 6 15是L1的第一块,第2块2 3 4 16是L2的第1块)

那么i+2块可能来自哪里呢?要么是原L1块在第i块后面,要么是原L2块在i+1块后面的块。也就是第i+1块至少比N个数要大(N为块内数目),换言之i和i+1块归并后的最小块i'块均比i+1块小,这一点是本算法的难点,想

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值