1、算法思想:

桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。为了使桶排序更加高效,我们需要做到这两点:

  • 在额外空间充足的情况下,尽量增大桶的数量
  • 使用的映射函数能够将输入的 N 个数据均匀的分配到 K 个桶中

2、图片演示(图片来源菜鸟教程)

元素分布在桶中:

元素在每个桶中排序

代码实现:

public class BucketSort {private static final InsertSort insertSort = new InsertSort();public static void main(String[] args) throws Exception {int[] arr = {22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70};arr = bucketSort(arr, 5);for(int i : arr) {System.out.print(i + " ");}}private static int[] bucketSort(int[] arr, int bucketSize) throws Exception {if (arr.length == 0) {return arr;}int minValue = arr[0];int maxValue = arr[0];for (int value : arr) {if (value < minValue) {minValue = value;} else if (value > maxValue) {maxValue = value;}}int bucketCount = (int) Math.floor((maxValue - minValue) / bucketSize) + 1;int[][] buckets = new int[bucketCount][0];// 利用映射函数将数据分配到各个桶中for (int i = 0; i < arr.length; i++) {int index = (int) Math.floor((arr[i] - minValue) / bucketSize);buckets[index] = arrAppend(buckets[index], arr[i]);}int arrIndex = 0;for (int[] bucket : buckets) {if (bucket.length <= 0) {continue;}// 对每个桶进行排序,这里使用了插入排序bucket = InsertSort.insertSort(bucket);for (int value : bucket) {arr[arrIndex++] = value;}}return arr;}/*** 自动扩容,并保存数据*/private static int[] arrAppend(int[] arr, int value) {arr = Arrays.copyOf(arr, arr.length + 1);arr[arr.length - 1] = value;return arr;}
}

运行结果:3 5 9 22 32 34 35 37 50 55 64 70 82 89

十大经典排序算法—桶排序相关推荐

  1. 十大经典排序算法-桶排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  2. 【十大经典数据挖掘算法】k-means

    [十大经典数据挖掘算法]k-means https://mp.weixin.qq.com/s/SWlE-KBJ4mVza92nJFX1hg 作者简介: Treant  人工智能爱好者社区专栏作者 博客 ...

  3. 【十大经典数据挖掘算法】Naïve Bayes

    [十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 朴素贝叶斯(Naïve Bayes) ...

  4. 【十大经典数据挖掘算法】C4.5

    [十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 决策树模型与学习 决策树(de ...

  5. 【十大经典数据挖掘算法】PageRank

    作者简介: Treant 人工智能爱好者社区专栏作者 博客专栏:https://www.cnblogs.com/en-heng 引言 PageRank是Sergey Brin与Larry Page于1 ...

  6. 十大经典数据挖掘算法:SVM

    作者简介: Treant 人工智能爱好者社区专栏作者 博客专栏:https://www.cnblogs.com/en-heng SVM(Support Vector Machines)是分类算法中应用 ...

  7. 图解十大经典机器学习算法入门

    弱人工智能近几年取得了重大突破,悄然间,已经成为每个人生活中必不可少的一部分.以我们的智能手机为例,看看到底温藏着多少人工智能的神奇魔术. 下图是一部典型的智能手机上安装的一些常见应用程序,可能很多人 ...

  8. 排序算法----桶排序(java版)

    桶排序 桶排序(Bucket Sort)顾名思义,会用到"桶",我们可以将其想象成一个容器,核心思想是将要排序的数据分到几个有序的桶里,每个桶里的数据再单独进行排序.桶内排完序之后 ...

  9. 疯子的算法总结(六) 复杂排序算法 ② 桶排序

    从<基于比较的排序结构总结 >中我们知道:全依赖"比较"操作的排序算法时间复杂度的一个下界O(N*logN).但确实存在更快的算法.这些算法并不是不用"比较& ...

最新文章

  1. yolov4网络结构_重磅更新!YoLov4最新论文!解读YoLov4框架!
  2. CentOS查看 占用 内存 最多的 进程
  3. MongoDB数据库操作---终端操作
  4. 最新的.net书籍教程 更新时间:2005-9-5
  5. 电脑word文档页眉的横线怎么去掉
  6. python 开源cms内容管理系统_wagtail-基于Django构建的开源内容管理系统
  7. CSDN的MD编辑器【写作技巧】
  8. 分布式系统关注点——如何去实施「负载均衡」? 1
  9. mysql out of range,mysql保存数据提示:Out of range value for column错误
  10. 如何实现地图App中附近地点搜索及聚合标记功能
  11. vnc连接linux使用教程_远程管理之VNC 详解
  12. 云原生系列 六【轻松入门容器基础操作】
  13. 学习python-mysql:报错AttributeError: module 'MySQLdb' has no attribute 'cursors'
  14. 为React应用添加国际化支持
  15. 全球及中国氢燃料电池汽车行业销售规模与运营前景展望报告2022版
  16. Win 8换徽标全面整合亮点功能大阅兵——乡巴佬下载
  17. 对于c语言排序方法的论文,c语言排序算法论文.doc
  18. 按下亮 松开灭 c语言程序,MSP430G2452按键控制P1.0口LED灯亮灭
  19. 交互式弦图的绘制(R实现)
  20. 获取文件的catlog签名信息

热门文章

  1. 机器视觉 Histogram of oriented gradients
  2. iOS8.2:为什么你应该升级,怎么升级
  3. #内存泄露# #memwatch# memwatch
  4. 如何查看Nginx日志中关于百度爬虫的日志记录
  5. vcard 名片_如何在没有vCard(.vcf)文件的情况下将名片图像添加到Outlook 2013中的签名...
  6. html统计表合并单元格的快捷键,excel合并单元格的快捷键是什么?
  7. 大型项目中需求分析人员与其他人员的分工协作
  8. Linux查看系统性能命令
  9. 五星好评!基于uniapp开发的开源项目推荐
  10. 关于方法论在生活上用途问题