什麼是選擇排序法?
選擇排序法是一種直觀的排序演算法。每次從未排序的部分中找出最小(或最大)的元素,將其放到已排序部分的末尾,直到整個陣列排序完成。
演算法特點
- 簡單易懂:邏輯清晰,容易理解和實現
- 原地排序:不需要額外的記憶體空間
- 不穩定排序:相等元素的相對位置可能改變
- 效率一般:時間複雜度恆為 O(n²)
排序原理
把陣列分為「已排序」和「未排序」兩個部分。每次從未排序部分找到最小元素,放到已排序部分的末尾。就像在一堆數字中一次次「選出」最小的放在前面。
虛擬碼與實際程式碼對照
這裡展示 Selection Sort 的關鍵流程,並比較虛擬碼與頁面中的 JavaScript 實作。
虛擬碼
function selectionSort(arr):
n = length(arr)
for i in 0..n-2:
minIndex = i
for j in i+1..n-1:
if arr[j] < arr[minIndex]:
minIndex = j
swap(arr, i, minIndex)
JavaScript 對照
async function selectionSort() {
const n = array.length;
for (let i = 0; i < n - 1; i++) {
let minIndex = i;
for (let j = i + 1; j < n; j++) {
if (!isSorting) return;
if (array[j] < array[minIndex]) {
minIndex = j;
}
}
if (minIndex !== i) {
await swap(i, minIndex);
}
}
}
程式碼與動畫對應
const n = array.length; -> 取得資料長度,準備選擇排序動畫
let minIndex = i; -> 將當前未排序區段第一個元素設為最小值候選,動畫標記候選元素
if (array[j] < array[minIndex]) { -> 比較當前元素與最小值候選,更新候選最小值,動畫標示比較結果
await swap(i, minIndex); -> 將最小值交換到已排序區段末端,動畫顯示實際交換動作
}