程序实现 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
]

更新时间: 15-Oct-2020

607 次浏览

开启你的 职业生涯

通过完成教程获得认证

开始
广告
© . All rights reserved.