Selection Sorting 選擇排序
跟插入排序不同之處在於,它不是逐一比對,而是直接每輪都掃過一遍元素,用一個變數放最小值,更新到掃完時就知道這輪最小的數字多少,再把它置換到第一個元素,第二輪再從第二個元素開始迭代,找出最小值排在第二個元素,依此類推。
好處是 swap 次數平均來講不會比插入排序高,每輪最多就是一次 swap,代表記憶體佔用空間會較小、較固定,但無論如何 time complexity 都會是 O(n),因為固定會用巢狀迴圈來執行。
所以當記憶體的使用空間比較限縮,又不用太擔心元素間的判斷成本時,適合用選擇排序大於插入排序。
public static List<Integer> sortList(List<Integer> unsortedList) {
for (int i = 0; i < unsortedList.size(); i++) {
int minIndex = i;
for (int j = i; j < unsortedList.size(); j++) {
if (unsortedList.get(j) < unsortedList.get(minIndex)) {
minIndex = j;
}
}
int temp = unsortedList.get(i);
unsortedList.set(i, unsortedList.get(minIndex));
unsortedList.set(minIndex, temp);
}
return unsortedList;
}
第一層迴圈用來鎖定迭代範圍,每一輪掃完都往前縮小一格,下層迴圈再用鎖定範圍內的元素去找最小值在哪個 index 位置然後 swap。