归并排序与双调排序

原始序列:50 11 13 20 29 78 56 31

  1. 归并排序
    采用分治法的策略,
    1)将原始序列分成2个子序列,然后继续对每个序列递归划分,直到得到的子序列长度为1为止。
    50 11 13 20 | 29 78 56 31
    50 11 | 13 20 | 29 78 | 56 31
    50 | 11 | 13 | 20 | 29 | 78 | 56 | 31
    2)使子序列有序,再合并一个个子序列
    11 50 | 13 20 | 29 78 | 31 56
    11 13 20 50 | 29 31 56 78
    11 13 20 29 31 50 56 78

  2. 双调排序
    1)双调序列
    A. 先单调递增后单调递减(或先单调递减后单调递增);
    B. 或通过循环移位可达到A的状态
    2)任意序列(长度为n)生成双调序列(Bitonic merge):
    相邻两个元素合并形成n/2个单调性相反的单调序列,两两序列合并,分别按相反单调性排序,直到生成1个长度为n的双调序列
    11 50 | 13 20 | 78 29 | 56 31
    11 13 20 50 |78 56 31 29
    11 13 20 50 78 56 31 29
    3)双调排序
    将原始的双调序列分成2个双调序列,然后继续对每个双调序列递归划分,得到更短的双调序列,直到得到的子序列长度为1为止。(把一个序列(1…n)对半分,假设n=2^k,然后1和n/2+1比较,小的放上,接下来2和n/2+2比较,小的放上,以此类推;然后看成两个(n/2)长度的序列,因为他们都是双调序列,所以可以重复上面的过程;总共重复k轮,即最后一轮已经是长度是2的序列比较了,就可得到最终的排序结果。)
    A.将11与78进行比较,13与56比较,20与31,50与29,小的放前面
    11 13 20 29 78 56 31 50
    B.11与20比较,13与29,78与31,56与50,小的放前面
    11 13 20 29 31 50 78 56
    B.11与13比较,20与29,31与50,78与56,小的放前面
    11 13 20 29 31 50 56 78

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值