選擇排序以「最少交換次數」著稱,適合資料移動成本極高(如大型結構體、Flash 記憶體)的場景。本文提供標準實作、複雜度分析與適用場景對比。
min。min 與未排序區間首位 i 交換。#include <iostream>
using namespace std;
void SelectSort(int arr[], int len) {
for (int i = 0; i < len - 1; ++i) {
int min = i;
for (int j = i + 1; j < len; ++j)
if (arr[j] < arr[min]) min = j;
if (min != i) swap(arr[i], arr[min]);
}
}
int main() {
int arr[] = {2, 4, 1, 0, 8, 4, 8, 9, 20, 7};
SelectSort(arr, 10);
for (int v : arr) cout << v << ' '; // 0 1 2 4 4 7 8 8 9 20
}
| 指標 | 數值 | 說明 |
|---|---|---|
| 時間複雜度 | O(N²) | 雙層迴圈,與資料分佈無關 |
| 空間複雜度 | O(1) | 原地排序 |
| 交換次數 | ≤ N-1 | 所有比較類排序中最少 |
| 穩定性 | 不穩定 | 交換可能改變相等元素相對順序 |
選擇排序雖非通用高效排序,但其「最小化寫入」特性在特定硬體/資料結構下具不可替代價值。理解各排序演算權衡,才能根據實際約束條件做最優選擇。