本片文章做为排序算法系列的扩展介绍两个排序算法,并行排序和量子排序,不要被名字唬住,让我们来慢慢来探索吧。
双调排序
双调排序(bitonic sort)由ken batcher在1968年创建的,是基于比较的并行排序算法,其主要思想是将随机序列转换为双调序列,即序列单调递增,单调递减(移位双调序列也是双调序列),然后对双调序列进行排序的过程,算法主要分为两部分,第一步是将无序的序列转换为双调序列;第二部分将序列等倍划分为多个小序列比较排序直到整个序列有序。下面对其进行详细介绍。
赛前预热
双调序列
双调序列(Bitonic Sequence) 是指由一个 非严格增序列X 和 非严格减序列Y 构成的序列,任意两个数,都是双调序列。 (非严格指的是可以出现重复元素,或者NaN不参与排序)
定义:一个序列 a1,a2, …,an 是双调序列(Bitonic Sequence),如果: (1)存在一个 ak(1 ≤ k ≤ n),使得 a1 ≥ … ≥ ak ≤ … ≤ an 成立;或者 (2)序列能够循环移位满足条件(1) 条件(2)非常重要,因为好多序列表面不是,其实是双调的
##Batcher定理 将任意一个长为2n的双调序列A分为等长的两半X和Y,将X中的元素与Y中的元素一一按原序比较,即a[i]与a[i+n] (i < n)比较,将较大者放入MAX序列,较小者放入MIN序列。则得到的MAX和MIN序列仍然是双调序列,并且MAX序