JavaScript插入排序

插入排序類似於人類按數字或字母順序對數據進行排序。例如,讓班裏的每個學生上交一張寫有他的名字、學生證號以及個人簡歷的索引卡片。學生上交上來的卡片是沒有順序的,但是我想讓這些卡片按字母順序排好,這樣就可以很容易地與班級花名冊進行對照了。

插入排序,有兩個循環。外循環將數組元素挨個移動,而內循環則對外循環選中的元素及它前面的元素進行比較。如果外循環中選中的元素比內循環選中的元素小,那麼數組元素會向右移動,而內循環的這個位置騰出位置。

打個比方就類比水滸傳一百單八將的排名吧,每個好漢來了不知道自己排老幾,怎麼辦,那就和已經排過級別的人比較,然後找到其對應的位置,單八將宋萬、杜遷先上的梁山,先默認杜遷第一來的也是單八將最厲害的,然後宋萬來了,一比較宋萬厲害,那宋萬排第一,杜遷排第二,接下來朱貴來了,朱貴沒他們兩個厲害,那就排第三,再後來林沖來了,林沖比他們三個都厲害,那林沖排第一,宋萬第二,杜遷第三,朱貴第四,依次類推。梁山排名其實就是典型的插入排序。

function insertionSort(arr) {
    for (let outer = 1; outer < arr.length; outer++) {
      let temp = arr[outer]
      let inner = outer
      while (inner > 0 && arr[inner - 1] > temp) {
        arr[inner] = arr[inner - 1]
        inner--
      }
      arr[inner] = temp
    }
  }

下面,就讓我們來測試一下:

let arr = [1,3,9,28,11,69,54,99,31]
  insertionSort(arr)
  console.log(arr)

輸出如下: