Java 桶排序实现 如何判断该放到哪个桶里
时间:2022-07-22
本文章向大家介绍Java 桶排序实现 如何判断该放到哪个桶里,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
桶排序 类似于计数排序所创建的统计数组,桶排序需要创建若干个桶来协助排序。
每一个桶代表一个区间范围,里面可以承载一个或多个元素。
再分别对每个桶里的元素进行排序 最后对桶集合进行遍历输出的就是有序数组
体现了分治思想
public void bucketSort(int[] array) {
int size = array.length;
int max = array[0], min = array[0];
for (int i = 1; i < size; i++) {
if (array[i] > max) max = array[i];
if (array[i] < min) min = array[i];
}
int bucketNum = size;//桶的数量
ArrayList<LinkedList<Integer>> bucketList = new ArrayList<>();
for (int i = 0; i < bucketNum; i++) {
bucketList.add(new LinkedList<>());
}
for (int i = 0; i < size; i++) {
//放到哪个桶
int num = (array[i] - min) * (bucketNum - 1) / (max - min);//重点
bucketList.get(num).add(array[i]);
}
for (int i=0;i<bucketNum;i++){
Collections.sort(bucketList.get(i));
}
int index = 0;
for (int i=0;i<bucketNum;i++){
System.out.println("桶"+i+"的元素数量:" + bucketList.get(i).size());
for (int n:bucketList.get(i)){
array[index++] = n;
}
}
}
其中
int num = (array[i] - min) * (bucketNum - 1) / (max - min); =偏移量 * (桶数量-1) / 差值 =偏移量 / ( 差值 / (桶数量-1) )
而 差值/(桶数量-1) 就是求出每个桶区间长度的公式
也就是说 取具体放到哪个桶的索引值的方法就是拿该元素的偏移量除以区间长度
每个桶中使用了jdk的归并排序。区间划分的越细,即桶的数量越多,理论上分到每个桶中的元素就越少,桶内数据的排序就越简单,其时间复杂度就越接近于线性。
极端情况下,就是区间小到只有1,即桶内只存放一种元素,桶内的元素不再需要排序,因为它们都是相同的元素,这时桶排序差不多就和计数排序一样了。
- 当前所有源码链接
- Python入门基础连载(4)控制流
- 济西站构建大数据运营网络,打造智能化列车加工厂
- 五位数终端收购的域名dongxiao.cn已启用
- 全球互联网发展进入“拐点”——展望下一代互联网
- 2 分钟论文:语音生成表情包背后的技术原理
- 享学课堂谈-Python程序员的常见错误
- 区块链技术,如何提升网络安全?
- 趣店推“大白汽车”业务 启用域名dabaiqiche.com
- 糖果吃了那么多,你真的知道比特币分叉是咋回事吗?
- 静息态网络拓扑传输认知任务信息
- MYSQL字符串截取总结:LEFT、RIGHT、SUBSTRING、SUBSTRING
- 如何用Python提取中文关键词?
- 工信部:将加大网络提速降费力度加快百兆宽带普及
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- php微信分享到朋友圈、QQ、朋友、微博
- Numpy 多维数据数组的实现
- 使用matplotlib的pyplot模块绘图的实现示例
- PHP get_html_translation_table()函数用法讲解
- Laravel中10个有用的用法小结
- PHP7 echo和print语句实例用法
- python上selenium的弹框操作实现
- php分享朋友圈的实现代码
- Laravel框架Request、Response及Session操作示例
- 利用scikitlearn画ROC曲线实例
- 小程序微信退款功能实现方法详解【基于thinkPHP】
- PHP回调函数简单用法示例
- PHP explode()函数用法讲解
- 详解提高使用Java反射的效率方法
- PHP fopen函数用法实例讲解