排序算法9-桶排序

2021-04-20  本文已影响0人  小杰66

桶排序

算法步骤:
1.按照待排序序列的最大最小值来创建桶
2.依次将数字分配到不同的桶中
3.对每个桶做排序操作
4.依次取出桶里的值

桶排序在某种意义上和前面的计数排序很像,但是计数排序只能使用于整数排序,而桶排序可以用于小数。

function insertionSort(arr) {
  let len = arr.length;
  let temp;
  for (let i = 1; i < len; i++) {
    let j = i;
    while (j > 0 && arr[j] < arr[j - 1]) {
      temp = arr[j];
      arr[j] = arr[j - 1];
      arr[j - 1] = temp;
      j--;
    }
  }
}

function bucketSort(arr) {
  // 最大最小值不循环了,简单通过api获取
  let minValue = Math.min(...arr);
  let maxValue = Math.max(...arr);

  let bucketSize = 10;
  let bucketCount = Math.floor((maxValue - minValue) / bucketSize) + 1;
  let buckets = Array(bucketCount)
    .fill(1)
    .map(() => []);

  for (let i = 0; i < arr.length; i++) {
    buckets[Math.floor((arr[i] - minValue) / bucketSize)].push(arr[i]);
  }

  arr.length = 0;
  for (let i = 0; i < buckets.length; i++) {
    insertionSort(buckets[i]); // 对每个桶进行排序,这里使用了插入排序
    for (let j = 0; j < buckets[i].length; j++) {
      arr.push(buckets[i][j]);
    }
  }

  return arr;
}
上一篇 下一篇

猜你喜欢

热点阅读