第二輪
58 4 52 4 87 1 23 9 一開始先設定minValueIndex為陣列的第一個索引值 0接著一輪掃過去會發現arr[5]是最小的所以minValueIndex = 5arr[0]和arr[minValueIndex]的值對調
1 4 52 4 87 58 23 9
再來設定minValueIndex = 1,也就是陣列的第二個元素
掃一輪過去會發現自己就是最小的,所以不用變
第三輪
再來設定minValueIndex = 2,也就是陣列的第三個元素
掃一輪過去會發現arr[3]是最小的
所以minValueIndex = 3
arr[2]和arr[minValueIndex]的值對調
第四輪
1 4 4 52 87 58 23 9
再來設定minValueIndex = 3,也就是陣列的第四個元素掃一輪過去會發現arr[7]是最小的所以minValueIndex = 7arr[3]和arr[minValueIndex]的值對調
1 4 4 9 87 58 23 52
再來設定minValueIndex = 4,也就是陣列的第五個元素掃一輪過去會發現arr[6]是最小的所以minValueIndex = 6arr[4]和arr[minValueIndex]的值對調
1 4 4 9 23 58 87 52
再來設定minValueIndex = 5,也就是陣列的第六個元素掃一輪過去會發現arr[7]是最小的所以minValueIndex = 7arr[5]和arr[minValueIndex]的值對調
1 4 4 9 23 52 87 58
這樣就完成了!是不是比泡沫排序還要簡單呢?看到這邊可以開始嘗試寫看看了!再來設定minValueIndex = 6,也就是陣列的第七個元素掃一輪過去會發現arr[7]是最小的所以minValueIndex = 7arr[6]和arr[minValueIndex]的值對調
1 4 4 9 23 52 58 87
public static void selectionSort(int[] arr, int beginI, int endI){ int minValueIndex; int temp; if(endI-beginI+1 == 1){ return; } for(int i = beginI ; i < endI+1 ; i++){ minValueIndex = i; for(int j = i + 1 ; j < endI+1 ; j++){ if(arr[j] < arr[minValueIndex]){ minValueIndex = j; } } temp = arr[i]; arr[i] = arr[minValueIndex]; arr[minValueIndex] = temp; } } |