選擇排序法 (Selection Sort)

簡單直觀的搜尋式排序

回到首頁

1. 操作原理

選擇排序法透過重複從未排序部分選取最小元素,放置在已排序部分的末尾。每一輪都會找到當前未排序序列中的最小值,並與未排序部分的起始位置交換。

重點:選擇排序是一種不穩定原地排序的方法。
核心流程為:尋找最小值交換位置,逐步擴展已排序區域。

2. 時間及空間複雜度

情況 時間複雜度 空間複雜度 說明 難易度
最佳 O(n²) O(1) 即使陣列已排序,仍需掃描所有元素尋找最小值。 困難
平均 O(n²) O(1) 每次都需要掃描剩餘未排序元素,比較次數固定。 困難
最壞 O(n²) O(1) 無論輸入順序如何,時間複雜度始終為 O(n²)。 困難
空間 O(1) 原地排序,不需要額外的暫存陣列。
穩定性 不穩定 相同元素的相對順序可能會改變。 中等

3. 互動視覺化

中等
0
步驟數
0
比較次數
0
交換次數
準備就緒 - 請載入或產生陣列
未排序
搜尋中
當前最小值
已排序

📝 步驟紀錄

4. 偽代碼及實作範例

// 偽代碼 for i := 0 to n - 2 minIdx := i for j := i + 1 to n - 1 if A[j] < A[minIdx] minIdx := j if minIdx != i swap(A[i], A[minIdx]) // JavaScript 範例 function selectionSort(arr) { const n = arr.length; for (let i = 0; i < n - 1; i++) { let minIdx = i; for (let j = i + 1; j < n; j++) { if (arr[j] < arr[minIdx]) { minIdx = j; } } if (minIdx !== i) { [arr[i], arr[minIdx]] = [arr[minIdx], arr[i]]; } } return arr; }