博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
桶排序
阅读量:4135 次
发布时间:2019-05-25

本文共 1774 字,大约阅读时间需要 5 分钟。

import java.util.*;/** * 桶排序,是一种线性时间的排序算法,需要创建若干个桶来协助排序,每个桶代表一个区间范围,里面可以承载一到多个元素 * 时间复杂度:平均复杂度为O(n) * 第一步:求数列最大、最小值,运算量为n * 第二步:创建空桶,运算量为n * 第三步:把原始数据的元素分配到各个桶中,运算量为n * 第四步:在每个桶内部做排序,在元素分配相对均匀的情况下,所有桶的运算量之和为n * 第五步:输出排序数列,运算量为n * 因此,桶排序的总体时间复杂度为O(n) * 桶排序的性能并非绝对稳定,如果元素极不均衡,在极端情况下,第一个桶中有n-1个元素,最后一个桶中只有一个元素,此时的时间复杂度为O(nlogn),而且还白白创建了许多空桶 */public class BucketSort {    public static double[] bucketSort(double[] arr) {        //1、得到数组的最大值、最小值和差值d        double max = arr[0];        double min = arr[0];        for (double i : arr) {            if (i > max) {                max = i;            }            if (i < min) {                min = i;            }        }        double d = max - min;        //2、初始化桶        int bucketNum = arr.length;        List
> bucketList = new ArrayList<>(); for (int i = 0; i < bucketNum; i++) { bucketList.add(new LinkedList<>()); } //3、遍历原始数组,将每个元素放入桶中 for (double i : arr) { int num = (int) ((i - min) * (bucketNum - 1) / d); bucketList.get(num).add(i); } //4、对每个桶内部进行排序 for (LinkedList item : bucketList) { Collections.sort(item); } //5、输出全部元素 double[] sortArray = new double[arr.length]; int index = 0; for (LinkedList
item : bucketList) { System.out.println("----" + Arrays.toString(item.toArray())); for (double i : item) { sortArray[index++] = i; } } return sortArray; } public static void main(String[] args) { double[] array = new double[]{4.12, 6.421, 0.0023, 3.0, 2.123, 8.122, 4.12, 10.09}; double[] sortArray = bucketSort(array); System.out.println(Arrays.toString(sortArray)); }}

 

转载地址:http://nqsvi.baihongyu.com/

你可能感兴趣的文章
使用AJAX传数组,后台接受数组
查看>>
java基础-数组转换,删除,去重复(自己玩儿)
查看>>
spring框架bean初始化给变量赋值(生命周期)-自己写着玩儿
查看>>
java驼峰转下划线,下划线转驼峰
查看>>
ElasticSearch的安装与使用(一)
查看>>
Java 8时间和日期API 20例
查看>>
IDEA的简单操作方法
查看>>
页面刷新之后显示当前页面的方法(左边导航,右边内容)
查看>>
Bean转化工具类(bean转bean,对象转换,对象转map,map转对象)
查看>>
使用js禁止浏览器回退
查看>>
使用js获取url中的参数并添加到新的url中
查看>>
解决表单提交到后台,日期类型转换问题
查看>>
SpringMVC处理表单日期数据转换异常(Date)使用@InitBinder
查看>>
使用js实现的邮箱自动补全
查看>>
SQL使用[CDATA[]]来代替转义字符大于小于号;
查看>>
从前台传递多个对象给后台MVC接收,传递数组给后台
查看>>
JAVA使用POI完成Excel批量导入操作
查看>>
JAVA使用POI完成Excel批量导出操作
查看>>
使用jstree从后台获取数据在前台进行树状菜单展示(树状菜单 JsTree)
查看>>
js禁止用回车键
查看>>