選擇排序算法


三 ,選擇排序

      從算法邏輯上看,選擇排序是一種簡單直觀的排序算法,在簡單選擇排序過程中,所需移動記錄的次數比較少。

 1,基本思想

     選擇排序的基本思想:比較+交換

在待排序的一組數據中,選出最小(最大)的一個數與第一個位置的數交換,然后在剩下的數中,再找最小(最大)的數與第二個位置的數交換位置,

依次類推,直到第N-1個元素與第N個元素交換位置,選擇排序結束。

2,過程描述

      

操作方法:
第一趟:從n個記錄中找出關鍵碼最小的記錄和第一個記錄交換;
第二趟:從第二個記錄開始的n-1個記錄中再選出關鍵碼最小的記錄與第二個記錄交換
以此類推......
第i趟,則從第i個記錄開始的n-i+1個記錄中選出關鍵碼最小的記錄與第i個記錄交換,直到整個序列按關鍵碼有序。

 3,代碼案例:

      

public class SelectSort {
    
   public static void main(String[] args) {
       
       //定義一個數組
       int arr[]={3,1,2,5,4};
       SelectSort(arr);
       System.out.println("選擇排序:"+Arrays.toString(arr));
       
   }
   public static void SelectSort(int[] array) {
       
       //判斷數組為空或為一個元素的情況
       if (null == array || array.length <= 1) {
           return;
       }
       //數組比較次數n-1
       for (int i = 0; i < array.length - 1; i++) {
           
           int min = i;//保存當前最小元素的位置
           //遍歷待排序數組元素(i之后的元素)
           for (int j = i + 1; j < array.length; j++) {
               //如果已排序中  較大元素  大於   待排序元素中的  最小元素 則更換元素對應索引
               if (array[min] > array[j]) {
                   min = j;
               }
               //確保找出待排序的最小元素的編號
           }
           //置換位置
           int temp = array[min];
           array[min] = array[i];
           array[i] = temp;
       }
   }
  
}

4,選擇排序的時間復雜度

    簡單選擇排序的比較次數與序列的初始排序無關。假設待排序的系列有N個元素,則比較次數總是N(N-1)/2
   而移動次數與系列的初始排序有關,當排序正序時,移動次數最少,為0
   當序列反序時,移動次數最多,為3N(N-1)/2
   所以,綜上,簡單排序的時間復雜度為O(N*N)

 

平均時間復雜度 最好情況 最壞情況 空間復雜度
O(n²) O(n²) O(n²) O(1)

             選擇排序的簡單和直觀名副其實,這也造就了它”出了名的慢性子”,無論是哪種情況,哪怕原數組已排序完成,它也將花費將近n²/2次遍歷來確認一遍。

       即便是這樣,它的排序結果也還是不穩定的。 唯一值得高興的是,它並不耗費額外的內存空間。

 法,在簡單選擇排序過程中,所需移動記錄的次數比較少。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM