常用演算法-選擇排序

庫奇發表於2019-03-08

JS陣列排序是我們日常開發和麵試過程中在熟悉不過的一個概念了,這裡我們對陣列排序做一個總結,這一節首先來說一下選擇排序

首先我們構建一個陣列

var arr = [3, 2, 1, 4, 8, 6, 7, 9, 5]
複製程式碼

再來模擬一下選擇排序的過程,這裡我們按照升序為案例

我們首先遍歷陣列,以陣列的第一個元素為基準,然後和後面的其他元素依次做比較,當找到比第一個元素值小的元素,則將基準換為當前元素,一直找到最後一個元素為止,此時找到陣列中的最小值,然後將最小值和陣列的第一個元素進行位置對換。 此時我們的陣列結構變為

var arr = [1, 2, 3, 4, 8, 6, 7, 9, 5]
複製程式碼

第一次迴圈之後找到1為陣列中的最小值,和第一個元素3替換位置。第二輪遍歷、第三輪遍歷和第一輪的遍歷原理一樣。下面我們看程式碼

selectedSort: function(arr) {
    for(let i = 0; i < arr.length; i++) {
      let minIndex = i; // 基準值的下標
      for(let j = i + 1; j < arr.length; j++) {
        if(arr[j] < arr[minIndex]) 
          minIndex = j
      }
      [arr[i],arr[minIndex]] = [arr[minIndex],arr[i]] // ES6變數交換
    }
    return arr
  }
複製程式碼

下面步驟解釋一波

arr = [3, 2, 1, 4, 8, 6, 7, 9, 5]

-> 第一次迴圈,從下標0開始,找到最小的數下標,然後和第0個位置元素互換位置

arr = [1, 2, 3, 4, 8, 6, 7, 9, 5]

-> 第二次迴圈,從下標1開始,找到最小的數下標,然後和第1個位置元素互換位置,但是此時2就是最小的元素,所以位置不發生變化

arr = [1, 2, 3, 4, 8, 6, 7, 9, 5]

...

arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]

執行程式碼參考:https://github.com/wangzhenggui/Common-algorithm

相關文章