排序算法(二):插入排序

概念

把數組分成兩部分,一部分是有順序的,第二部分是沒有順序的,從沒有順序的數組中拿出來一個,把他排在有序數組中的相應位置

時間複雜度

最好:O(n),原數組已經是升序的。
最壞:O(n²)
平均:O(n²)

代碼


  // 插入算法
    function insert_sort(arr) {
      let leg = arr.length

      for (let i = 1; i < leg; i++) {
        let value = arr[i]
        let j = i - 1;

        for (; j >= 0; j--) {
          if (arr[j] > value) {
            arr[j + 1] = arr[j]
          } else {
            break
          }
        }
        arr[j + 1] = value
      }
    }

    var sortArr = [9, 6, 3, 5, 2, 1, 7, 343, 6, 643, 243, 544, 5, 63, 234, 0, 56, 123]
    insert_sort(sortArr)
    console.log(sortArr)
    // [0, 1, 2, 3, 5, 5, 6, 6, 7, 9, 56, 63, 123, 234, 243, 343, 544, 643]
    

解釋

    let value = arr[i] // 是從沒有順序的數組中取出來的 比較做的數
    let j = i-1 // 是有序數組的長度
    
    for (; j >= 0; j--) { //遍歷有序數組從大往小遍歷
    // 從大往小,如果這個值比value大,當前的位置不是value,要把他後面的數全部往後移動一位,如果這個值比value小,說明當前位置是value的地方,
    if (arr[j] > value) {
        arr[j + 1] = arr[j]
    }
    arr[j + 1] = value // 把當前的位置放上value
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章