Java演算法-選擇排序

來源:互聯網
上載者:User

標籤:

  (轉載出處)

  選擇排序的基本思想是遍曆數組的過程中,以 i 代表當前需要排序的序號,則需要在剩餘的 [i…n-1] 中找出其中的最小值,然後將找到的最小值與 i 指向的值進行交換。因為每一趟確定元素的過程中都會有一個選擇最大值的子流程,所以人們形象地稱之為選擇排序。

  選擇排序是一種簡單直觀的排序方法,每次尋找序列中的最小值,然後放在最末尾的位置。

  舉個執行個體來看看:

初始: [38, 17, 16, 16, 7, 31, 39, 32, 2, 11]i = 0:  [2 , 17, 16, 16, 7, 31, 39, 32, 38 , 11] (0th [38]<->8th [2])i = 1:  [2, 7 , 16, 16, 17 , 31, 39, 32, 38, 11] (1st [38]<->4th [17])i = 2:  [2, 7, 11 , 16, 17, 31, 39, 32, 38, 16 ] (2nd [11]<->9th [16])i = 3:  [2, 7, 11, 16, 17, 31, 39, 32, 38, 16] ( 無需交換 )i = 4:  [2, 7, 11, 16, 16 , 31, 39, 32, 38, 17 ] (4th [17]<->9th [16])i = 5:  [2, 7, 11, 16, 16, 17 , 39, 32, 38, 31 ] (5th [31]<->9th [17])i = 6:  [2, 7, 11, 16, 16, 17, 31 , 32, 38, 39 ] (6th [39]<->9th [31])i = 7:  [2, 7, 11, 16, 16, 17, 31, 32, 38, 39] ( 無需交換 )i = 8:  [2, 7, 11, 16, 16, 17, 31, 32, 38, 39] ( 無需交換 )i = 9:  [2, 7, 11, 16, 16, 17, 31, 32, 38, 39] ( 無需交換 )

 

  由例子可以看出,選擇排序隨著排序的進行( i 逐漸增大),比較的次數會越來越少,但是不論數組初始是否有序,選擇排序都會從 i 至數組末尾進行一次選擇比較,所以給定長度的數組,選擇排序的比較次數是固定的: 1 + 2 + 3 + …. + n = n * (n + 1) / 2 ,而交換的次數則跟初始數組的順序有關,如果初始數組順序為隨機,則在最壞情況下,數組元素將會交換 n 次,最好的情況下則可能 0 次(數組本身即為有序)。

由此可以推出,選擇排序的時間複雜度和空間複雜度分別為 O(n2 ) 和 O(1) (選擇排序只需要一個額外空間用於數組元素交換)。

實現代碼:

 

/**   * 選擇排序<br/>   * <li>在未排序序列中找到最小元素,存放到排序序列的起始位置</li>   * <li>再從剩餘未排序元素中繼續尋找最小元素,然後放到排序序列末尾。</li>   * <li>以此類推,直到所有元素均排序完畢。</li>   *    * @param numbers   */  public static void selectSort(int[] numbers) {       int size = numbers.length, temp;       for (int i = 0; i < size; i++) {           int k = i;           for (int j = size - 1; j >i; j--)  {               if (numbers[j] < numbers[k])  k = j;           }           temp = numbers[i];           numbers[i] = numbers[k];           numbers[k] = temp;       }   }

 

 

Java演算法-選擇排序

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.