15.1双调排序(Bitonic sort)

概述

双调合并排序(Bitonic mergesort)是一个并行排序算法。它也用作建立一个排序网络的一种构造方法。这个算法是由Ken Batcher提出来的。基于它生成的排序网络包含了个比较操作和的延时,这里的n是要排序的元素个数。

一个排好序的序列是一个单调非降(或单调非增)序列。一个双调序列是一个满足对于特定的k(),,或者是该序列的循环移位序列。

例如,

 

或者

 

双调排序的基本思路

考虑到大小是 n 的双调序列 S , 它的前半部分是递增的,后半部分是递减的。

 

可以通过“Pair-wise min-max comparison”,将一个双调序列,分裂成两个双调序列。如下所示:

这两个子双调序列有如下特性:

  1. 都是双调序列。
  2. 中存在一个元素b满足:b前面的元素递增,b后面的元素递减。
  3. 中存在一个元素c满足:c前面的元素递减,c后面的元素递增。
  4. 中的所有元素小于中的元素(因为,b是的最大值,c是的最小值)。

这4个特征是双调排序的基础。

使用双调序列合并完成双调序列排序

标识是一个递增序列,标识是一个递减序列。

上面的排序还差最后一步才能完成。左边是输入,右边是输出。

下图是一个完整的双调排序图。

其中,

  1. 浅蓝色:标识是一个单调递增序列;
  2. 浅绿色,标识一个单调递减序列;
  3. 箭头的尾指向头,是指这两个数值作比较和交换,箭头指向的那条线存储max,箭头尾部那条线存储min。

我认为双调排序在排序算法中性能肯定不是最优的,但是,它的优势在于并行化。可以看到,它的每一级合并操作都是并行的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值