参考文章

桶排序(箱排序)

定义

桶排序的工作原理是将数组分到有限数量的桶中,每个桶再个别排序
有可能使用别的排序算法或者以递归方式继续使用桶排序进行排序

稳定性

稳定

时间复杂度

平均时间复杂度:O(N + C)
C = N * (logN-logM)
N为待排数据,M为桶数量
当N=M时,最好效率达到O(N)

适用场合

两个必要条件:

  1. 最大最小值相差较大
  2. 数据分布均匀,否则可能将数据集中到同一个桶中,便失去了桶排序的意义

过程分析

桶排序的基本思想:把数组arr划分为n个大小相同的子区间(桶),每个子区间各自排序,最后合并。
计数排序是桶排序的一种特殊情况,可以把计数排序当成每个桶里只有一个元素的情况

  1. 找出待排序数组的最大值和最小值

  2. 使用动态数组ArrayList作为桶,桶中放置的元素也使用ArrayList存储。

    桶的数量:(max-min)/arr.length +1

  3. 每个桶各自排序

  4. 遍历桶数组,把排好的元素放进输出数组

代码

测试用例

int arr[] = {37,18,21,21,49,0,25,6,14};

原代码

       /*** 桶排序* @param arr* @param len*/public static void bucketSort(int[] arr,int len){// 求取最大值最小值,确定桶区间范围// 记录数组中的最大值int max = Integer.MIN_VALUE;// 记录数组中的最小值int min = Integer.MAX_VALUE;for (int i = 0;i<len;i++){max = Math.max(max,arr[i]);min = Math.min(min,arr[i]);}System.out.println("最大值:"+max);System.out.println("最小值:"+min);// 桶数int bucketNum = (max - min) / arr.length + 1;System.out.println("桶数 " + bucketNum);ArrayList<ArrayList<Integer>> bucketArr = new ArrayList<>(bucketNum);for (int i = 0;i<bucketNum;i++){bucketArr.add(new ArrayList<Integer>());}// 把每个元素放入桶for (int i = 0;i<len;i++){int num = (arr[i] - min) / len;System.out.println("num:"+arr[i]+"     index of num :" + num);bucketArr.get(num).add(arr[i]);}// 对每个桶进行排序for (int i = 0;i<bucketArr.size();i++){Collections.sort(bucketArr.get(i));}// 输出排序后的桶数据System.out.println(bucketArr.toString());//合成新数组int i = 0;for (ArrayList<Integer> arrItem:bucketArr){if (arrItem.size()!=0){for (int item:arrItem){arr[i++]=item;}}}System.out.println(Arrays.toString(arr));}

运行结果

【算法】排序_桶排序相关推荐

  1. 【排序算法】图解桶排序

    目录 前言 桶排序思想 桶排序算法分析 时间复杂度分析 桶排序适用情况 实现一个桶排序 结语 前言 在数据结构与算法的排序中,我们很多人可能更多的熟悉冒泡排序.快速排序.归并排序.可能对堆排序.桶排序 ...

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

    冒泡排序.选择排序.插入排序.希尔排序.归并排序.快速排序.堆排序.计数排序.桶排序.基数排序的动图与源代码. 目录 关于时间复杂度 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 ...

  3. js排序算法详解-桶排序

    全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js排序算法详解-桶排序 一看到这个名字就会觉得奇特,几个意思,我排序还要再准备几个桶不成?还真别说,想用桶排序还得真准备几个桶 ...

  4. 算法与数据结构07:前缀树,计数排序与桶排序

    算法与数据结构07:前缀树,计数排序与桶排序 前缀树 计数排序 桶排序 前缀树 Trie 1.根据字符串数组中,每个字符串的字符作为路径,组成而成的一个多叉树结构 2.每个节点都有一个paths数组, ...

  5. 十大排序算法详解(二)归并排序、堆排序、计数排序、桶排序、基数排序

    文章目录 一.归并排序 1.1 归并排序基础[必会知识] 1.1.1 递归实现 1.1.2 非递归实现 1.2 归并排序优化 1.2.1 小数组使用插入排序 1.2.2 避免多余比较 1.2.3 节省 ...

  6. 三种线性排序算法 计数排序、桶排序与基数排序-BYVoid

    转自:BYVoid [非基于比较的排序] 在计算机科学中,排序是一门基础的算法技术,许多算法都要以此作为基础,不同的排序算法有着不同的时间开销和空间开销.排序算法有非常多种,如我们最常用的快速排序和堆 ...

  7. 三种线性排序算法 计数排序、桶排序与基数排序—— 转自:BYVoid

    三种线性排序算法 计数排序.桶排序与基数排序 [非基于比较的排序] 在计算机科学中,排序是一门基础的算法技术,许多算法都要以此作为基础,不同的排序算法有着不同的时间开销和空间开销.排序算法有非常多种, ...

  8. javascript算法排序之桶排序

    ​ ​ 活动地址:CSDN21天学习挑战赛 前言 经典的排序算法,很多人都听过,很多人也许用过,但是也有很多人,听过没见过.为什么呢?现在我们有了越来越多的框架.依赖包,我们将能用到排序的实际场景,作 ...

  9. 数据结构与算法学习--排序(桶排序,计数排序,基数排序)

    基数排序和计数排序可以参照链接 桶排序: 桶排序 (Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将阵列分到有限数量的桶子里.每个桶子再个别排序(有可能再使用别的排序算法或是以递 ...

  10. 八十五、再探希尔排序,桶排序,计数排序和基数排序

    @Author:Runsen 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化. ---- Runsen 关于排序,其实还有很多,比如常见的希尔排序,桶排序,计数排序和基数排 ...

最新文章

  1. 2015年第11本:代码整洁之道Clean Code
  2. 感知不强又徒增功耗?为何今年5G手机也这么重视AI
  3. LeetCode Decode Ways
  4. 查看LoadRunner脚本请求日志和服务器返回值方法
  5. python 调用class不指定函数_python调用另一个.py中的类或函数
  6. 电商三巨头交成绩单,这次拼多多输了吗?
  7. 利用Python随机或暴力生成密码
  8. android strm,Android 关于so文件的随记
  9. 最全多线程经典面试题和答案
  10. HTML+CSS+JS实现React简单的计算器实例
  11. Spring Cloud Nacos
  12. c++数据结构队列栈尸体_数据结构-栈与队列(二)
  13. 大学计算机学情分析,大学生学情分析
  14. 微信开发者工具小技巧——快速打开微信程序API文档。
  15. 【渝粤题库】陕西师范大学200891教育心理学作业(高起本)
  16. 修改DNS服务器的作用,请问修改DNS服务器会有什么后果
  17. 交替打印A1B2C3-Java多线程实现方式
  18. USB协议学习笔记 - 虚拟串口Virtual Port Com LED控制
  19. 统计学基础之常用统计量和抽样分布
  20. requireJS,rjs,gulp简易实现

热门文章

  1. 值得收藏!中国金融体系主要指标大全
  2. (转)5分钟APIG实战: 使用Rust语言快速构建API能力开放
  3. Kafka从上手到实践 - Kafka CLI:Reseting Offset Config CLI | 凌云时刻
  4. 阿里云云安全中心入选 Gartner CWPP 全球市场指南 | 凌云时刻
  5. 【图像隐写】基于matlab GUI DCT+FFT数字水印嵌入+攻击+提取(带面板)【含Matlab源码 1760期】
  6. 【表盘识别】基于matlab Hough变换指针式仪表识别(倾斜矫正)【含Matlab源码 1058期】
  7. 【运动学】基于matlab平抛小球地面跳跃规律【含Matlab源码 981期】
  8. 【图像处理】基于matlab GUI Hough变换+PDE图像去雨(带面板)【含Matlab源码 811期】
  9. 【数学建模】基于matlab GUI最小二乘法曲线拟合【含Matlab源码 492期】
  10. 【电路仿真】基于matlab Simulink四旋翼PID控制【含Matlab源码 454期】