是創建在歸併操作上的一種有效的排序算法。
平均、最好和最壞時間複雜度都爲O(nlog2n)線性對數。是穩定的。
該算法是採用分治法(Divide and Conquer)的一個非常典型的應用,且各層分治遞歸可以同時進行。
歸併操作(merge)
也叫歸併算法,指的是將兩個已經排序的序列合併成一個序列的操作。歸併排序算法依賴歸併操作。
迭代法
- 申請空間,使其大小爲兩個已經排序序列之和,該空間用來存放合併後的序列
- 設定兩個指針,最初位置分別爲兩個已經排序序列的起始位置
- 比較兩個指針所指向的元素,選擇相對小的元素放入到合併空間,並移動被選中序列的指針到下一位置
- 重複步驟3直到某一指針到達序列尾
- 將另一序列剩下的所有元素直接複製到合併序列尾
實現類爲 MergeSort
遞歸法
原理如下(假設序列共有n個元素):
- 將序列每相鄰兩個數字進行歸併操作,形成 n/2個序列,排序後每個序列包含兩一個元素
- 若此時序列數不是1個則將上述序列再次歸併,形成 n/4個序列,每個序列包含四三個元素
- 重複步驟2,直到所有元素排序完畢,即序列數爲1
代碼已上傳 GitHub ,可以在 這裏 找到