演算法之路__2、選擇排序
阿新 • • 發佈:2019-01-11
一、解釋
選擇排序法事實上 是對 定位比較交換法(也就是氣泡排序法) 的一種改進。
基本思想:第1趟,在待排序記錄r[1]~r[n]中選出最小的記錄,將它與r[1]交換;第2趟,在待排序記錄r[2]~r[n]中選出最小的記錄,將它與r[2]交換;以此類推,第i趟在待排序記錄r[i]~r[n]中選出最小的記錄,將它與r[i]交換,使有序序列不斷增長直到全部排序完畢。
從以上的 演算法思想中可以看出,選擇排序是選待排記錄中最小的一個放在左側, 而上一篇博文中寫到的冒泡是從待排記錄中選擇最大的放在右側。
示例:
初始序列:{49 27 65 97 76 12 38}
第1趟:12與49交換:12{
第2趟:27不動 :12 27{65 97 76 49 38}
第3趟:65與38交換:12 27 38{97 76 49 65}
第4趟:97與49交換:12 27 38 49{76 97 65}
第5趟:76與65交換:12 27 38 49 65{97 76}
第6趟:97與76交換:12 27 38 49 65 76 97 完成
二、程式碼
public static void selectionSort(int[] arr) { if (arr == null || arr.length < 2) { return; } //確定待排區域 for (int i = 0; i < arr.length - 1; i++) { //指標變數minIndex 表示最小元素下標 以當前位置開始 int minIndex = i; //從當前位置的下一個開始遍歷 //比minIndex位置元素小則 將小位置元素下標設定為minIndex for (int j = i + 1; j < arr.length; j++) { minIndex = arr[j] < arr[minIndex] ? j : minIndex; } //將當前位置元素與最小位置元素交換 int tmp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = tmp; } }