合併排序法 (Merge Sort)

使用分治法將陣列拆分後再合併排序

回到首頁

1. 操作原理

合併排序法採用分治策略,將陣列不斷拆分成更小的子陣列,直到每一部分僅包含一個元素,再逐一合併成有序序列。

重點:合併排序是一種穩定分治的方法。
核心流程為:分割陣列遞歸排序合併結果,適合處理大型資料集。

2. 時間及空間複雜度

情況 時間複雜度 空間複雜度 說明 難易度
最佳 O(n log n) O(n) 無論輸入順序如何,時間複雜度始終為 O(n log n)。 簡單
平均 O(n log n) O(n) 分治策略確保了穩定的性能表現。 簡單
最壞 O(n log n) O(n) 不受最壞情況輸入的影響,始終保持高效。 簡單
空間 O(n) 需要額外的暫存空間來進行陣列合併操作。 中等
穩定性 穩定 相同元素的相對順序不會改變,適合需要穩定排序的場景。

3. 互動視覺化

中等
0
步驟
0
比較次數
0
合併次數
準備就緒 - 請載入或產生陣列
未排序
比較中
合併中
已排序

📝 步驟紀錄

4. 偽代碼及實作範例

function mergeSort(arr) { if (arr.length <= 1) return arr; const middle = Math.floor(arr.length / 2); const left = mergeSort(arr.slice(0, middle)); const right = mergeSort(arr.slice(middle)); 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)); }