SelectionSort(選擇排序)

選擇排序的原理

每一趟從待排序的記錄中選出最小的元素,順序放在已排好序的序列最後,知道所有記錄排序完畢。 基於此思想的算法主要有:簡單選擇排序、樹形選擇排序和堆排序。算法

簡單選擇排序的基本思想:

  1. 給定數組:int[] arr={裏面n個數據};
  2. 第1趟排序,在待排序數據arr[1]~arr[n]中選出最小的數據,將它與arrr[1]交換;
  3. 第2趟,在待排序數據arr[2]~arr[n]中選出最小的數據,將它與r[2]交換;
  4. 以此類推,第i趟在待排序數據arr[i]~arr[n]中選出最小的數據,將它與r[i]交換,直到所有排序完成。

舉例

數組int[] arr = {5,8,5,2,9};數組


第一趟排序:排序

{5 8 5 2 9}進行比較,最小數據是 2 ,把 2 放在首位,也就是2 和第一個 5 互換位置圖片

排序結果:2 8 5 5 9it


第二趟排序:原理

除 2 以外的數據{5 8 5 9}進行比較,5最小,不用交換。im

排序結果:2 5 8 5 9數據


第三趟排序:img

除 2 5以外的{8 5 9}進行比較了,5最小,將 5 和 8 交換位置移動

排序結果:2 5 5 8 9


第四趟排序:

除2 5 5 以外的{8 9}進行比較,不用交換,此時只剩下一個元素 9,不用再進行一趟排序。排序結束

排序結果:2 5 5 8 9

圖示:

選擇排序圖示

代碼

輸入圖片說明

複雜度分析

選擇排序的時間複雜度:簡單選擇排序的比較次數與序列的初始排序無關。 假設待排序的序列有 N 個元素,則比較次數永遠都是N (N - 1) / 2。而移動次數與序列的初始排序有關。當序列正序時,移動次數最少,爲 0。當序列反序時,移動次數最多,爲3N (N - 1) / 2。

因此,綜上,簡單排序的時間複雜度爲 O(N2)。

穩定性分析

序列5 8 5 2 9, 咱們知道第一遍選擇第1個元素5會和2交換,那麼原序列中2個5的相對先後順序就被破壞了,因此選擇排序不是一個穩定的排序算法。

相關文章
相關標籤/搜索