博客
关于我
十大排序算法之——桶排序(十)
阅读量:516 次
发布时间:2019-03-07

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

桶排序

排序思想

划分多个范围相同的区间,每个子区间自排序,最后合并。

在这里插入图片描述

核心代码

/**     * 桶排序     * @param arr        数组     * @param bucketLen 每个桶的长度     */    private static void bucketSort(int[] arr, int bucketLen) {           //获取数组中的最大最小值        int min = arr[0];        int max = arr[0];        for (int i = 1; i < arr.length; i++) {               if (min > arr[i]) {                   min = arr[i];            }            if (max < arr[i]) {                   max = arr[i];            }        }        //根据数据区间以及每个桶中数据的个数  获取需要桶的个数  边界问题 +1        int bucketCount = (max - min) / bucketLen + 1;        //对数据进行分桶        List
> lists = new ArrayList
>(bucketCount); //初始化 for (int i = 0; i < bucketCount; i++) { lists.add(new ArrayList
()); } //将数据分配到桶中 for (int k : arr) { lists.get((k - min) / bucketLen).add(k); } //对每个桶中的数据进行排序 for (int i = 0; i < bucketCount; i++) { Collections.sort(lists.get(i)); } //将桶中的数据复制到原数组 int index = 0; for (int i = 0; i < bucketCount; i++) { for (int j = 0; j < lists.get(i).size(); j++) { arr[index++] = lists.get(i).get(j); } } }

特点

平均时间复杂度O(n+k),最好时间复杂度O(n),最坏时间复杂度O(n2),空间复杂度O(n+k),稳定。k桶的个数。

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

你可能感兴趣的文章
Mysql学习总结(19)——Mysql无法创建外键的原因
查看>>
Mysql学习总结(19)——Mysql无法创建外键的原因
查看>>
Mysql学习总结(1)——常用sql语句汇总
查看>>
Mysql学习总结(20)——MySQL数据库优化的最佳实践
查看>>
Mysql学习总结(21)——MySQL数据库常见面试题
查看>>
Mysql学习总结(22)——Mysql数据库中制作千万级测试表
查看>>
Mysql学习总结(23)——MySQL统计函数和分组查询
查看>>
Mysql学习总结(24)——MySQL多表查询合并结果和内连接查询
查看>>
Mysql学习总结(25)——MySQL外连接查询
查看>>
Mysql学习总结(26)——MySQL子查询
查看>>
Mysql学习总结(27)——Mysql数据库字符串函数
查看>>
Mysql学习总结(28)——MySQL建表规范与常见问题
查看>>
Mysql学习总结(29)——MySQL中CHAR和VARCHAR
查看>>
Mysql学习总结(2)——Mysql超详细Window安装教程
查看>>
Mysql学习总结(30)——MySQL 索引详解大全
查看>>
Mysql学习总结(31)——MySql使用建议,尽量避免这些问题
查看>>
Mysql学习总结(32)——MySQL分页技术详解
查看>>
Mysql学习总结(33)——阿里云centos配置MySQL主从复制
查看>>
Mysql学习总结(35)——Mysql两千万数据优化及迁移
查看>>
Mysql学习总结(36)——Mysql查询优化
查看>>