合併排序法(Merge Sort)

← 回到首頁

合併排序法原理

合併排序法是一種高效的排序演算法,採用分治法的思想。它將待排序的資料列逐次分割成較小的部分,對各部分進行排序,最後將各部分合併成一個有序的序列。

操作步驟

  1. 分割階段:將原陣列遞迴地分割成只包含一個元素的子陣列。
  2. 合併階段:比較兩個子陣列中的首個元素,將較小的元素加入結果陣列。
  3. 重複上述步驟,直到所有元素都被加入結果陣列。
  4. 將分割後的子陣列從下而上逐層合併,最終得到排序完成的陣列。

時間與空間複雜度

項目 複雜度 說明
最壞時間複雜度 O(n log n) 任意情況下都是這個複雜度
平均時間複雜度 O(n log n) 隨機排序的情況
最佳時間複雜度 O(n log n) 陣列已排序時仍為 O(n log n)
空間複雜度 O(n) 需要額外的空間儲存臨時子陣列

合併排序法演算法代碼

function mergeSort(arr) { if (arr.length <= 1) return arr; // 分割 const mid = Math.floor(arr.length / 2); const left = mergeSort(arr.slice(0, mid)); const right = mergeSort(arr.slice(mid)); // 合併 return merge(left, right); } function merge(left, right) { const result = []; let i = 0, j = 0; while (i < left.length && j < right.length) { if (left[i] <= right[j]) { result.push(left[i++]); } else { result.push(right[j++]); } } return result.concat(left.slice(i)).concat(right.slice(j)); }

排序動畫演示

600ms
比較次數 0
複製次數 0
合併層級 0
陣列大小 8