美文网首页
排序算法9-桶排序

排序算法9-桶排序

作者: 小杰66 | 来源:发表于2021-04-20 08:19 被阅读0次

桶排序

  • 平均时间复杂度:O(n+k)
  • 最好情况:O(n+k)
  • 最坏情况:O(n^2)
  • 空间复杂度:O(n+k)
  • 排序方式:Out-place
  • 稳定性:稳定

算法步骤:
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;
}

相关文章

  • 线性排序

    桶排序、计数排序、基数排序 一、线性排序算法介绍 1.线性排序算法包括桶排序、计数排序、基数排序。2.线性排序算法...

  • 排序算法9-桶排序

    桶排序 平均时间复杂度:O(n+k) 最好情况:O(n+k) 最坏情况:O(n^2) 空间复杂度:O(n+k) 排...

  • 浅谈排序算法

    排序算法有很多种,今天先谈谈一些简单的排序算法。包括桶排序、冒泡排序和快速排序算法。后期总结各种排序算法。 桶排序...

  • 排序算法(十一)桶排序

    排序算法(十一)桶排序   桶排序(Bucket sort)是计数排序改进版,同样属于非比较排序,该算法的基本思想...

  • 排序算法三(桶,计数,基数)

    桶排序,计数排序,基数排序算法的时间复杂度都是线性的,所以把这类排序算法叫作线性排序。 桶排序 概念:将要排序的数...

  • (转)排序算法

    排序算法点这里 数据结构与算法——计数排序、桶排序、基数排序

  • noip普及组3:排序算法

    排序算法 ①冒泡排序:O() ②插入排序:O() ③选择排序:O() ④桶排序 ⑤sort排序

  • 排序算法概述

    十大排序算法:冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序、希尔排序、计数排序,基数排序,桶排序 算法...

  • 十大排序算法

    算法说明 十大排序算法分别是:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序...

  • 桶排序与哈希桶排序

    一.桶排序 算法原理 桶排序 (箱排序)的原理是将待排序序列分到有限数量的桶里面,然后对每个桶再分别排序(可以使用...

网友评论

      本文标题:排序算法9-桶排序

      本文链接:https://www.haomeiwen.com/subject/krkhlltx.html