概述
双调合并排序(Bitonic mergesort)是一个并行排序算法。它也用作建立一个排序网络的一种构造方法。这个算法是由Ken Batcher提出来的。基于它生成的排序网络包含了个比较操作和的延时,这里的n是要排序的元素个数。
一个排好序的序列是一个单调非降(或单调非增)序列。一个双调序列是一个满足对于特定的k(),,或者是该序列的循环移位序列。
例如,
或者
双调排序的基本思路
考虑到大小是 n 的双调序列 S , 它的前半部分是递增的,后半部分是递减的。
可以通过“Pair-wise min-max comparison”,将一个双调序列,分裂成两个双调序列。如下所示:
,
这两个子双调序列有如下特性:
- 和都是双调序列。
- 中存在一个元素b满足:b前面的元素递增,b后面的元素递减。
- 中存在一个元素c满足:c前面的元素递减,c后面的元素递增。
- 中的所有元素小于中的元素(因为,b是的最大值,c是的最小值)。
这4个特征是双调排序的基础。
使用双调序列合并完成双调序列排序
标识是一个递增序列,标识是一个递减序列。
上面的排序还差最后一步才能完成。左边是输入,右边是输出。
下图是一个完整的双调排序图。
其中,
- 浅蓝色:标识是一个单调递增序列;
- 浅绿色,标识一个单调递减序列;
- 箭头的尾指向头,是指这两个数值作比较和交换,箭头指向的那条线存储max,箭头尾部那条线存储min。
我认为双调排序在排序算法中性能肯定不是最优的,但是,它的优势在于并行化。可以看到,它的每一级合并操作都是并行的。