15.1双调排序(Bitonic sort)

概述

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

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

例如,

15.1双调排序(Bitonic sort)_第1张图片

 

或者

15.1双调排序(Bitonic sort)_第2张图片

 

双调排序的基本思路

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

 

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

15.1双调排序(Bitonic sort)_第3张图片

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

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

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

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

15.1双调排序(Bitonic sort)_第4张图片

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

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

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

15.1双调排序(Bitonic sort)_第5张图片

其中,

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

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

你可能感兴趣的:(并行计算)