選擇排序–時間復雜度n^2
-
第一次從arr[0]–arr[n-1]中選出最小值,與arr[0]交換
-
第二次從arr[1]–arr[n-1]中選出最小值,與arr[1]交換…
-
最小數:假定當前這個數是最小數,然后和后面的每個數進行比較,當發現有更小的數時,重定最小數與最小數的下標
總結:
選擇排序一共有數組大小-1次排序
排序過程:
排序之前--
[101, 34, 119, 1]
第1輪后--
[1, 34, 119, 101]
第2輪后--
[1, 34, 119, 101]
第3輪后--
[1, 34, 101, 119]
代碼實現:
public class SelectSort {public static void main(String[] args) {int[] arr = {101, 34, 119, 1};System.out.println("排序之前--");System.out.println(Arrays.toString(arr));selectSort(arr);}public static void selectSort(int[] arr) {//時間復雜度n^2//總的排序循環次數for (int i = 0; i < arr.length - 1; i++) {
//假定當前最小索引與最小數int minindex = i;int min = arr[i];//從最小數后面一個數開始比較,也就是從第2個數開始比較for (int j = i+1; j < arr.length; j++) {if (min > arr[j]) {//如果當前選定的數并不是最小的數//重置最小數與最小下標min = arr[j];minindex = j;}}//一趟結束后,找到了最小值與最小索引,開始交換if (minindex != i) {//當最小值不是我們要交換的數值下標時//此時最小值的位置放成arr[0]arr[minindex] = arr[i];//交換最小值與arr[0],第一趟arr[i] = min;}System.out.println("第"+(i+1)+"輪后--");System.out.println(Arrays.toString(arr));}}
}