八大排序算法之選擇排序

時間復(fù)雜度:O(N^2)
額外空間復(fù)雜度:O(1)
是否可實現(xiàn)穩(wěn)定性:否

思路:

初始化一個變量minIndex用來存儲最小數(shù)值的下標(biāo),每次循環(huán)找出最小下標(biāo)minIndex,然后和當(dāng)前外層循環(huán)最前面的數(shù)交換,就能做到每次把本次循環(huán)中的最小數(shù)值放到最前面

例子:

比如一組數(shù){2,5,1,9}
每次初始化minIndex為當(dāng)前外循環(huán)的最前面的數(shù)字,第一次minIndex=0
比較2和5,2<5所以minIndex值不變,再比較2和1,2>1所以minIndex的值變成2
再比較1和9,1<9,minIndex不變,此時所有數(shù)值比較完畢,然后交換minIndex和i的值,i代表外層循環(huán)的位置
第二次循環(huán),minIndex=1,過程和第一次一樣,依次執(zhí)行下去得到結(jié)果

代碼:

 public static void selectionSort(int[] arr){
      if (arr==null||arr.length<2){
          return;
      }
      
      /*
      * 選擇排序的思想: 遍歷數(shù)組  初始化一個變量,代表每次循環(huán)找到的最小的數(shù)的下標(biāo)
      * 內(nèi)循環(huán),每一次找的都是最小數(shù)的下標(biāo),然后每次用當(dāng)前最小下標(biāo)的元素和arr[j]比較,
      * 看看當(dāng)前的下表是否是最小下標(biāo) 循環(huán)結(jié)束,minIndex就是這一次循環(huán)找到的最小的數(shù)的下標(biāo)
      * 然后交換i和minIndex的下標(biāo)
      * i代表每次開始的位置也就是每次循環(huán)最小的位置
      **/
      for (int i = 0;i<arr.length;i++){
          int minIndex = i;
          for (int j = i+1;j<arr.length;j++){
              minIndex = arr[minIndex] < arr[j]?minIndex:j;
          }
          swap(arr,i,minIndex);
      }
  }

    public static void swap(int[]arr,int i ,int j){
        int temp = 0;
        temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

在這里注意,選擇排序是不穩(wěn)定的,舉個例子序列5 8 5 2 9, 我們知道第一遍選擇第1個元素5會和2交換,那么原序列中2個5的相對前后順序就被破壞了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 數(shù)據(jù)結(jié)構(gòu)與算法--排序之冒泡、選擇、插入、希爾 我們關(guān)注的主要對象是重新排列數(shù)組元素的算法,每個元素都有一個主鍵,...
    sunhaiyu閱讀 1,222評論 2 12
  • 該系列文章主要是記錄下自己暑假這段時間的學(xué)習(xí)筆記,暑期也在實習(xí),抽空學(xué)了很多,每個方面的知識我都會另起一篇博客去記...
    Yanci516閱讀 12,645評論 6 19
  • 概述 排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    蟻前閱讀 5,298評論 0 52
  • 概述:排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    每天刷兩次牙閱讀 3,822評論 0 15
  • 總結(jié)一下常見的排序算法。 排序分內(nèi)排序和外排序。內(nèi)排序:指在排序期間數(shù)據(jù)對象全部存放在內(nèi)存的排序。外排序:指在排序...
    jiangliang閱讀 1,518評論 0 1

友情鏈接更多精彩內(nèi)容