最近在上Udacity的《Introduction to parallel programming》课程,里面介绍了一种很有趣的平行算法——Bitonic sort(双调排序)算法。在课程上我一直没懂为什么Bitonic sort算法保证了排序的正确性,于是花了几天功夫查找了相关资料。希望有同样疑问的你看到这篇文章会有所启示~
Bitonic sequence
为了明白Bitonic sort算法,我们首先要了解Bitonic sequence(双调序列)。
如果一个序列A=[x0, x1, x2, …, xn-1],存在一个下标i(0≤i≤n-1),使得:
x0≤ x1≤ …≤ xi, and xi≥ xi+1≥ …≥ xn-1
那么我们称这个序列是Bitonic(双调的)。
值得注意的是:
1. 一个序列如果是完全的升序或降序(或者说非降序和非升序更为严谨,但是在本文中为了方便理解,认为升序=非降序,降序=非升序),它也是Bitonic的。
2. Bitonic序列的子序列仍为Bitonic的。
3. 将一个一个Bitonic序列进行循环移位操作后,也是Bitonic