算法學習-排序部分

桶排序

簡單的桶排序

  • 栗子
    一場考試有5名同學,滿分10分,5名同學得到的分數分別爲5分,3分,5分,2分,8分,請給同學進行排序
  • JS簡易版桶排序算法實現
var bucketSort = function(arr, len, rule = 'desc') {
  if (!arr || arr.length < 1 || !len) return

  let tempArr = new Array(len)
  let returnArr = []
  for (let i = 0; i < len; i++) tempArr[i] = 0
  for (let j = 0; j < arr.length; j++) {
    tempArr[arr[j]] += 1 
  }
  if (rule === 'desc') {
    for (let i = 0; i < len; i++) {
      for (let j = 1; j <= tempArr[i]; j++) {
        returnArr.push(i)
      }
    }
  } else {
    for (let i = len; i > 0; i--) {
      for (let j = 1; j <= tempArr[i]; j++) {
        returnArr.push(i)
      }
    }
  }
  return returnArr
};

console.log(bucketSort([5,3,5,2,8], 11, 'asc'))
  • 學習講解
    上述代碼中新建大小爲11的數組,數組下表代表的是成績分佈情況(0到10分)
    簡易版桶排序排序思路:將同學的成績按照各自所對應的數組下標“倒進去”,多一個人,桶內數字加一;最後按照桶內數字的大小進行每個下標的循環輸出

  • 算法說明
    時間複雜度:O(M+N)
    時間複雜度說明:
    第一個循環–桶的數量—循環M次
    待排序的列表循環–同學的分數—循環N次
    循環輸出–循環M+N次
    整個算法循環M+N+M+N次 = O(2*(M+N)) = O(M+N)

冒泡排序

  • JS 實現
var bubbleSort = function(arr) {
  if (!arr || arr.length < 1) return
  let returnArr = arr

  for (let i = 0; i < returnArr.length; i++) {
    for (let j = 0; j < returnArr.length; j++) {
      if (returnArr[j] > returnArr[j+1]) {
        let temp = returnArr[j+1]
        returnArr[j+1] = returnArr[j]
        returnArr[j] = temp
      }
    }
  }
  return returnArr
};

console.log(bubbleSort([8,100,50,22,15,6,1,1000,99,0]))
  • 學習講解
    冒泡排序的基本思想是:每次比較相鄰的兩個元素,順序錯誤就交換

  • 算法說明
    時間複雜度:O(N2)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章