選擇排序法
阿新 • • 發佈:2017-11-29
最好 tps 程序設計 重復執行 void lec 冒泡 需要 挑戰程序設計競賽
選擇排序法會在每一步中選出一個最小值,進而完成排序。與插入排序法和冒泡排序法一樣,選擇排序法的各個計算步驟中,數組也分成“已排序部分”和“未排序部分”。
具體流程:
- 重復執行 n-1(數組長度為n)次下述操作
- 找出未排序部分最小值的位置min(數組中的索引)。
- 將min位置的元素與未排序部分的起始元素交換。
以數組{5, 4, 8, 7, 9, 3, 1}為例使用選擇排序法,流程如下圖所示:
參考代碼如下:
public static void selectionSort(int[] num){ if (num==null) return; //每次選擇一個未排序數組中最小的放在開始處,一共需要n-1次 for (int i=0; i<num.length-1; i++){ int min = i; //將每次遍歷開始的索引保存為min,之後min保存當前遍歷中數值最小的索引。 for (int j=i+1; j<num.length; j++){ if (num[j] < num[min]){ min = j; } } //如果min不等於i,將最小的數值調換到i位置上 if (i != min){ int temp = num[i]; num[i] = num[min]; num[min] = temp; } } }
選擇排序法算法不穩定;時間復雜度最好情況,最壞情況和平均情況的時間復雜度都是\(O(n^2)\);空間復雜度為\(O(1)\)。
參考文獻:《挑戰程序設計競賽-算法和數據結構》
選擇排序法