選擇排序
選擇排序(Java)
聲明:本文參考https://blog.csdn.net/gisboygogogo/article/details/107554216
一、原理
每一趟從待排序的數據元素中選擇最小(或最大)的一個元素作為首元素,直到所有元素排完為止,簡單選擇排序是不穩定排序
二、時間復雜度
時間復雜度為O(n^2)
三、代碼實現(已優化)
1 public static void selectSort(int[] arr){ 2 3 int min = 0; 4 int minIndex = 0; 5 6 //選擇排序時間復雜度是 O(n^2) 7 //算法就是先簡單讓后復雜。先把一個復雜算法,拆分成簡單的問題,然后逐步解決 8 for(int i=0; i< arr.length-1; i++){ 9 10 min = arr[i]; //假定最小值 11 minIndex = i; //假定最小值的索引 12 13 for(int j=i+1; j<arr.length; j++){ //這里是整個數組的長度,因為要遍歷整個數組的所有數,找到最小的那個,從第 i+1 個元素開始 14 if(min > arr[j]){ //說明min不是假定的最小值 arr[j]比 min還小 15 min = arr[j]; //重置min,讓min重返最小值,找到該輪的最小值 16 minIndex = j; //重置minIndex,找到該輪的最小值索引 17 } 18 } 19 20 //將最小值 放在 arr[0],即交換 21 //如第一輪下來 i=0時,min = 1, minIndex = 3 22 if(minIndex != i){ //這里是優化的代碼,如果minIndex沒有發生改變,就不執行里面得的代碼 23 arr[minIndex] = arr[i]; //把 第i輪循環開始的,第一個元素 放到下標 minIndex 最小值那個位置上(第一輪 arr[3] = arr[0], 將111放在1那個位置) 24 arr[i] = min; //第一輪的時候,此時min = 1 是最小值,arr[0] = 1, 把第一個元素設置成最小值 25 } 26 27 System.out.println("第" + (i+1) +"輪候后:"); 28 System.out.println(Arrays.toString(arr)); 29 } 30 }

浙公網安備 33010602011771號