排序:四. 歸併排序(合併兩個已經排好序的數組)

是創建在歸併操作上的一種有效的排序算法。
平均、最好和最壞時間複雜度都爲O(nlog2n)線性對數。是穩定的。
該算法是採用分治法(Divide and Conquer)的一個非常典型的應用,且各層分治遞歸可以同時進行。

歸併操作(merge)

也叫歸併算法,指的是將兩個已經排序的序列合併成一個序列的操作。歸併排序算法依賴歸併操作。

迭代法

  1. 申請空間,使其大小爲兩個已經排序序列之,該空間用來存放合併後的序列
  2. 設定兩個指針,最初位置分別爲兩個已經排序序列的起始位置
  3. 比較兩個指針所指向的元素,選擇相對小的元素放入到合併空間,並移動被選中序列的指針到下一位置
  4. 重複步驟3直到某一指針到達序列尾
  5. 將另一序列剩下的所有元素直接複製到合併序列尾

實現類爲 MergeSort
image.png

image.png

遞歸法

原理如下(假設序列共有n個元素):

  1. 將序列每相鄰兩個數字進行歸併操作,形成 n/2個序列,排序後每個序列包含兩一個元素
  2. 若此時序列數不是1個則將上述序列再次歸併,形成 n/4個序列,每個序列包含四三個元素
  3. 重複步驟2,直到所有元素排序完畢,即序列數爲1

代碼已上傳 GitHub ,可以在 這裏 找到

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章