在要排序的一個數組中,選出最小的一個,而後與第一個位置交換;再對剩餘的數組當中選出最小的一個,與當前數組的第一個交換,以此類推,直到最後一個和倒數第二個比較爲止。算法
public static void selectSort(int[] arr) { // 1.定義最小值的位置 int pos = 0; for (int i = 0; i < arr.length - 1; i++) { // 2.緩存當前數組元素 int temp = arr[i]; // 3.先給定當前位置,由於多是最小的。 pos = i; // 4.對i位置的元素與i+1位置開始到arr.length位置逐一進行對比,找到最小的值 for (int j = i + 1; j < arr.length; j++) { // 5.j位置的元素與temp元素進行比較 if (arr[j] < temp) { // 6.找到比temp要小的,並標記這個小值得位置 temp = arr[j]; pos = j; } } // 7.當前的最小值與i位置的元素交換 arr[pos] = arr[i]; arr[i] = temp; } for (int i : arr) { System.out.print(i + ", "); } }
例子:int[] arr = {20,8,13,6,12}數組
第一次循環後:找到arr數組中最小值6與第一個位置交換,結果:{6,8,13,20,12}緩存
第二次循環後:找到除第一次循環後的第一個位置元素即{8,13,20,12}中找到最小值8,獲得{8,13,20,12},第二次循環結束結果:{6,8,13,20,12}spa
第三次循環後:找到除第一次和第二次循環的各第一個位置元素即{13,20,12}中找到最小值12,與第一個位置交換獲得{12,20,13},第三次循環結束結果:{6,8,12,20,13}排序
第四次循環後:找到除第1、2、三次循環各第一個位置元素即{20,13}中找到最小值13,與第一個位置交換,獲得{13,20},最終結果:{6,8,12,13,20}select
(也就是說,外層循環,只須要:arr.length - 1次,就能完成排序)循環