程式實現 JavaScript 中的桶排序
透過將大小為 n 的陣列分割成 k 個桶來進行桶排序,每個桶都包含特定範圍的元素值。
然後,使用排序演算法對這些桶進行排序,該演算法可以根據預期的輸入大小進行選擇。
我們可以將此演算法描述如下 −
演算法
Create the initial bucketSort function Create variables for i, min, max, and bucket size Find min and max value Create amount of buckets Push values to correct buckets Sort buckets
示例
程式碼如下 −
const arr = [32, 6, 34, 4, 78, 1, 6767, 4, 65, 34, 879, 7]; const bucketSort = arr => { if (arr.length === 0) { return arr; } let i, minValue = arr[0], maxValue = arr[0], bucketSize = 5; arr.forEach(function (currentVal) { if (currentVal < minValue) { minValue = currentVal; } else if (currentVal > maxValue) { maxValue = currentVal; } }) let bucketCount = Math.floor((maxValue - minValue) / bucketSize) + 1; let allBuckets = new Array(bucketCount); for (i = 0; i < allBuckets.length; i++) { allBuckets[i] = []; } arr.forEach(function (currentVal) { allBuckets[Math.floor((currentVal - minValue) / bucketSize)].push(currentVal); }); arr.length = 0; allBuckets.forEach(function(bucket) { insertion(bucket); bucket.forEach(function (element) { arr.push(element) }); }); return arr; } const insertion = arr => { let length = arr.length; let i, j; for(i = 1; i < length; i++) { let temp = arr[i]; for(j = i - 1; j >= 0 && arr[j] > temp; j--) { arr[j+1] = arr[j]; } arr[j+1] = temp; } return arr; }; console.log(bucketSort(arr));
輸出
控制檯中的輸出 −
[ 1, 4, 4, 6, 7, 32, 34, 34, 65, 78, 879, 6767 ]
廣告