归并排序与双调排序

原始序列: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值