陪玩平臺原始碼中的排序演算法,插入排序的實現

雲豹科技程式設計師發表於2021-12-13

插入排序

插入排序: 對陪玩平臺原始碼中未排序的資料中, 在已排序的序列中從後向前掃描, 找到相應的位置插入。

資料結構: 陣列

步驟:

1、從第一個元素開始, 該元素認定為已經被排序了
2、取出下一個元素, 在已經排序的元素序列中從後向前掃描
3、如果 已排序的元素 大於 該元素, 那麼將 已排序的元素 向後 移動
4、繼續向前掃描, 重複第 3個步驟, 一直找到 已排序的元素 小於 或者 等於 該元素
5、將該元素 插入到 新的位置
6、後續, 重複2-5的步驟, 直到完成陪玩平臺原始碼的整個排序

時間複雜度

平均時間複雜度 O(n2)O(n^{2})O(n2)
最壞時間複雜度 O(n2)O(n^{2})O(n2) (倒序)
最優時間複雜度 O(n)O(n)O(n) (升序)

示例

比如,陪玩平臺原始碼中有一組 無序陣列: [6, 5, 3, 1, 8, 7, 2, 4]

第一步: 預設 第一個元素 6是已經排好序的
第二步: 取出 第二個元素 5, 然後向前掃描, 發現 6 > 5, 則 6向後移動一位, 此時發現 前面已經掃描結束, 那麼 將 5放入到 當前位置[5, 6, 3, 1, 8, 7, 2, 4]
第三步: 取出 第三個元素 3, 然後向前掃描, 發現 6 > 3 ,那麼 將 6 向後移動一位, 繼續比較,發現 5 > 3, 那麼將 5 向後移動一位, 此時 發現全部掃描結束, 那麼 將3 放置到當前位置[3, 5, 6, 1, 8, 7, 2, 4]
第四步: 取出 第四個元素 1, 然後向前掃描, 發現 6 > 1 ,那麼 將 6 向後移動一位, 繼續比較,發現 5 > 1 ,那麼 將 5 向後移動一位, 繼續比較, ,發現 3 > 1 ,那麼 將 3 向後移動一位,掃描結束, 那麼 將 6 放置到當前位置[1, 3, 5, 6, 8, 7, 2, 4]
第五步: 取出 第五個元素 8, 然後向前掃描, 發現 8 > 6 ,掃描結束, 那麼 將 8 位置不動 [1, 3, 5, 6, 8, 7, 2, 4]
以此類推, 直到全部結束[1, 2, 3, 4, 5, 6, 7, 8]’

程式碼實現(Typescript)

輔助工具 —— 生成隨機數

function getRandomInteger(count: number = 1, min: number = 0, max: number = 1000): Array<number> {
  const res: Array<number> = []
  for (let i = 0; i < count; i ++ ){
    const random = Math.floor(Math.random() * (max - min) + min)
    res.push(random)
  }
  return res
}

第一種: 及時交換資料

function insertSort(arr:Array<number>): Array<number> {
  if (arr.length <= 1) return arr
  for (let i = 1; i < arr.length; i++) {
    const curValue: number = arr[i]
    for (let j = i - 1; j >= 0; j--) {
      if (arr[j] > curValue) {
        arr[j + 1] = arr[j]
        arr[j] = curValue
      }
    }
  }
  return arr
}

第二種: 記錄索引, 遍歷後集中更新陪玩平臺原始碼資料

function insertSort(arr:Array<number>): Array<number> {
  if (arr.length <= 1) return arr
  for (let i = 1; i < arr.length; i++) {
    const curValue: number = arr[i]
    let currentIndex: number = i // 記錄索引 
    for (let j = i - 1; j >= 0; j--) {
      if (arr[j] > curValue) {
        currentIndex = j // 更新當前索引位置
      }
    }
    for (let k = i; k > currentIndex; k--) {
      arr[k] = arr[k-1]
    }
    arr[currentIndex] = curValue
  }
  return arr
}

測試

const randoms: Array<number> = getRandomInteger(10)
console.log("排序前:"  + randoms) // 排序前:119,997,628,740,104,81,588,632,877,402
console.log("排序後:" + insertSort(randoms)) // 排序後:81,104,119,402,588,628,632,740,877,997

以上便是“陪玩平臺原始碼中的排序演算法,插入排序的實現”的全部內容,希望對大家有幫助。

本文轉載自網路,轉載僅為分享乾貨知識,如有侵權歡迎聯絡雲豹科技進行刪除處理
原文連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69996194/viewspace-2847491/,如需轉載,請註明出處,否則將追究法律責任。

相關文章