原始序列:50 11 13 20 29 78 56 31
-
归并排序
采用分治法的策略,
1)将原始序列分成2个子序列,然后继续对每个序列递归划分,直到得到的子序列长度为1为止。
50 11 13 20 | 29 78 56 31
50 11 | 13 20 | 29 78 | 56 31
50 | 11 | 13 | 20 | 29 | 78 | 56 | 31
2)使子序列有序,再合并一个个子序列
11 50 | 13 20 | 29 78 | 31 56
11 13 20 50 | 29 31 56 78
11 13 20 29 31 50 56 78 -
双调排序
1)双调序列:
A. 先单调递增后单调递减(或先单调递减后单调递增);
B. 或通过循环移位可达到A的状态
2)任意序列(长度为n)生成双调序列(Bitonic merge):
相邻两个元素合并形成n/2个单调性相反的单调序列,两两序列合并,分别按相反单调性排序,直到生成1个长度为n的双调序列
11 50 | 13 20 | 78 29 | 56 31
11 13 20 50 |78 56 31 29
11 13 20 50 78 56 31 29
3)双调排序:
将原始的双调序列分成2个双调序列,然后继续对每个双调序列递归划分,得到更短的双调序列,直到得到的子序列长度为1为止。(把一个序列(1…n)对半分,假设n=2^k,然后1和n/2+1比较,小的放上,接下来2和n/2+2比较,小的放上,以此类推;然后看成两个(n/2)长度的序列,因为他们都是双调序列,所以可以重复上面的过程;总共重复k轮,即最后一轮已经是长度是2的序列比较了,就可得到最终的排序结果。)
A.将11与78进行比较,13与56比较,20与31,50与29,小的放前面
11 13 20 29 78 56 31 50
B.11与20比较,13与29,78与31,56与50,小的放前面
11 13 20 29 31 50 78 56
B.11与13比较,20与29,31与50,78与56,小的放前面
11 13 20 29 31 50 56 78