下圖為選擇排序動態圖,每一次遍歷選擇當前最小的元素放到對應的位置。
1)基本原理:
遍歷整個隊列,依次找出當前剩餘隊列中的最小值,選擇即選擇當前剩餘無序隊列中的最小值。
2)核心代碼:
public static void selectionSort(int[] a, int n) {
// 排序趟數,最後一個元素是最大的不用比較所以是 (n-1) 趟
for (int i = 0; i < n-1; i++) {
int minIndex = i; // 無序列表中最小元素的下標
for (int j = i+1; j < n; j++) {
// 在無序列表中查找最小元素的小標並記錄
if (a[j] < a[minIndex]) {
minIndex = j;
}
}// 將最小元素交換到本次循環的前端
int tmp = a[minIndex];
a[minIndex] = a[i];
a[i] = tmp;
}
}
3)特點:
平均時間複雜度是 O(n^2),最佳和最差情況也是一樣
空間複雜度 O(1)
不穩定的排序算法(相等元素的前後順序排序後可能改變)
閱讀更多 lucky小爺 的文章