視覺化展示
已排序
掃描比較中
當前最小值
300ms
演算法偽代碼
function selectionSort(arr):
1 n = arr.length
2 for i = 0 to n-2:
3 min_idx = i // 設當前為最小值
4 for j = i+1 to n-1:
5 if arr[j] < arr[min_idx]:
6 min_idx = j // 發現更小值
7 if min_idx != i:
8 swap(arr[i], arr[min_idx])
操作原理
選擇排序法是一種簡單直觀的排序演算法。它的工作原理是:首先在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(或最大)元素,然後放到已排序序列的末尾。
以此類推,直到所有元素均排序完畢。這個過程就像是每次從剩下的牌中「選擇」出最小的一張,依序排好。
操作過程
- 設初始最小值: 將未排序區間的第一個元素預設為當前最小值。
- 尋找最小值: 往後掃描所有未排序的元素。如果發現比當前最小值還要小的元素,就更新「最小值」的標記位置。
- 交換位置: 掃描完畢後,將找到的最小值與未排序區間的第一個元素進行交換。
- 縮小範圍: 此時第一個元素已經排好序。將未排序區間往右縮小一格,重複步驟 1~3,直到整個陣列排序完成。
複雜度分析
- 時間複雜度 (所有情況):
O(n2)
無論陣列一開始是不是已經排好序,選擇排序法都必須「掃描過剩下所有的元素」才能確定誰是最小值。因此最好、最壞、平均情況下的時間複雜度皆為 O(n2),效率相對較低。 - 空間複雜度 (Space Complexity):
O(1)
是一種原地排序演算法,只需要額外的常數空間來暫存最小值索引和交換用的變數。