選擇排序每次從未排序區間找出最小元素,放到已排序區間末尾。時間複雜度 O(n²),空間複雜度 O(1),不穩定排序。
using System;
public class SelectionSorter
{
public void Sort(int[] list)
{
for (int i = 0; i < list.Length - 1; i++)
{
int min = i;
for (int j = i + 1; j < list.Length; j++)
{
if (list[j] < list[min]) min = j;
}
// 交換
int temp = list[min];
list[min] = list[i];
list[i] = temp;
}
}
}
// 測試
public class Program
{
public static void Main()
{
int[] arr = { 1, 5, 3, 6, 10, 55, 9, 2, 87, 12, 34, 75, 33, 47 };
new SelectionSorter().Sort(arr);
Console.WriteLine(string.Join(" ", arr));
// 輸出: 1 2 3 5 6 9 10 12 33 34 47 55 75 87
}
}
| 指標 | 數值 |
|---|---|
| 時間複雜度 (最好/平均/最差) | O(n²) / O(n²) / O(n²) |
| 空間複雜度 | O(1) |
| 穩定性 | 不穩定 |
| 交換次數 | 最多 n-1 次 (最少交換的排序之一) |