Algorithm in Javascript Bucket Sort

我怎麼又去研究算法了呢?本身不是根正苗紅CS專業,基礎差,亡羊補牢,填充數據結構方面的空白,學習過程遇到有趣的算法就記錄下來。
常見算法,多爲 c c++ python 所描述,爲方便,嘗試轉成平常所用javascript 才疏學淺,若有寫的不當之處,不吝賜教。🙏🙏🙏🙏javascript

桶排序

代碼實現:html

function bucketSort (arr) {
  // 假設咱們排序的範圍爲0-10 那麼咱們準備11個桶來放這些數字
  let buckets = new Array(11).fill(0)
  let newArr = []

  // 裝桶
  arr.forEach(val => { buckets[val]++ })

  buckets.forEach((val, index) => {
    for (let i = 1; i <= val; i++) {
      newArr.push(index)
    }
  })

  return newArr
}

console.log(bucketSort([5, 3, 5, 2, 8]))
console.log(bucketSort([1, 3, 9, 8, 7, 2]))
console.log(bucketSort([3, 5, 2, 7, 9, 2, 5]))複製代碼

圖解:
java



理解:

桶排序 (Bucket sort)或所謂的箱排序的原理是將數組分到有限數量的桶子裏,而後對每一個桶子再分別排序(有可能再使用別的排序算法或是以遞歸方式繼續使用桶排序進行排序),最後將各個桶中的數據有序的合併起來。python

  1. 根據數列最大值設置桶數量
  2. 把數據放到對應的桶裏
  3. 循環輸出不爲空桶裏面的數據,計數多少輸出多少次

桶排序動畫演示: Bucket Sort Visualization
特色:c++

  1. 桶排序是穩定的
  2. 桶排序是常見排序裏最快的一種,比快排還要快…大多數狀況下
  3. 桶排序很是快,可是同時也很是耗空間,基本上是最耗空間的一種排序算法

參考資料

  1. 常見排序算法 - 桶排序 (Bucket Sort)
相關文章
相關標籤/搜索