我怎麼又去研究演算法了呢?自己不是根正苗紅CS專業,基礎差,亡羊補牢,填充資料結構方面的空白,學習過程遇到有趣的演算法就記錄下來。
常見演算法,多為 c c++ python 所描述,為方便,嘗試轉成日常所用javascript 才疏學淺,如有寫的不當之處,不吝賜教。????
桶排序
程式碼實現:
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]))複製程式碼
圖解:
理解:
桶排序 (Bucket sort)或所謂的箱排序的原理是將陣列分到有限數量的桶子裡,然後對每個桶子再分別排序(有可能再使用別的排序演算法或是以遞迴方式繼續使用桶排序進行排序),最後將各個桶中的資料有序的合併起來。
- 根據數列最大值設定桶數量
- 把資料放到對應的桶裡
- 迴圈輸出不為空桶裡面的資料,計數多少輸出多少次
桶排序動畫演示: Bucket Sort Visualization
特點:
- 桶排序是穩定的
- 桶排序是常見排序裡最快的一種,比快排還要快…大多數情況下
- 桶排序非常快,但是同時也非常耗空間,基本上是最耗空間的一種排序演算法