02選擇排序

選擇排序是一種簡單直觀的排序算法,無論什么數據進去都是 O(n2) 的時間復雜度。所以用到它的時候,數據規模越小越好。唯一的好處可能就是不占用額外的內存空間了吧。

選擇排序算法步驟:

  1. 首先在未排序序列中找到最小元素,與第一個元素進行交換,讓最小的元素在排序最前面。
  2. 再從剩余未排序n-1個元素中繼續尋找最小元素,然后與第二個元素交換位置。
  3. 重復第二步,第N-1趟遍歷剩下的2個數據,找出其中最小的數值與第N-1個元素交換,至此選擇排序完成。

以下面5個無序的數據為例:
56 12 80 91 20(文中僅細化了第一趟的選擇過程)

  • 第1趟:12 56 80 91 20


    第一趟對比過程.png
  • 第2趟:12 20 80 91 56
  • 第3趟:12 20 56 91 80
  • 第4趟:12 20 56 80 91
let arr = [56, 12, 80, 91, 20];

function selectSort(arr) {
  for (let i = 0; i < arr.length - 1; i++) {
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[j] < arr[i]) {
        let temp = arr[j];
        arr[j] = arr[i];
        arr[i] = temp;
      }
    }
    console.log(arr)
  }
  return arr;
}

console.log(selectSort(arr)) // [ 12, 20, 56, 80, 91 ]

平均時間復雜度:O(n2)
空間復雜度:O(1) (用于交換和記錄索引)
穩定性:不穩定 (比如序列【5, 5, 3】第一趟就將第一個[5]與[3]交換,導致第一個5挪動到第二個5后面)

排序前:56,12,80,91,20
排序中!!調整:12,56,80,91,20
排序中!!不調整:12,56,80,91,20
排序中!!不調整:12,56,80,91,20
排序中!!不調整:12,56,80,91,20
排序后:12,56,80,91,20
-------------------
排序前:12,56,80,91,20
排序中!!不調整:12,56,80,91,20
排序中!!不調整:12,56,80,91,20
排序中!!調整:12,20,80,91,56
排序后:12,20,80,91,56
-------------------
排序前:12,20,80,91,56
排序中!!不調整:12,20,80,91,56
排序中!!調整:12,20,56,91,80
排序后:12,20,56,91,80
-------------------
排序前:12,20,56,91,80
排序中!!調整:12,20,56,80,91
排序后:12,20,56,80,91
-------------------
最終結果:12,20,56,80,91
image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容