基础排序算法 —— 桶排序

简介

十大经典排序算法里面冒泡、插入、选择排序时间为O($n^2$),归并、快排、堆排序这些排序时间为O(nlogn),此外还有三种更快的排序算法为桶排序,基数排序,计数排序。后面这三种排序时间为O(n),因此也被称之为线性排序算法。

桶排序一般是分这几步来操作:

  1. 先定义一组或者说几个有序的“桶”

  2. 使用映射函数将数组内的数据映射到各自对应的“桶”内

  3. 在每个“桶”内进行排序(归并、插入、快排等等都可以)

  4. 按顺序将每个”桶“内的数据依次取出,就可以输出一个有序的数组/数列

尝试实现

输入数组为:40,55,10,64,2,71,90,25,81,43

2.1 创建有序”桶“

”桶“一般我们采用二维的数组来实现。考虑到数组还要扩容,所以在Java端直接用ArrayList来做即可。

ArrayList<ArrayList<Integer>> buckets = new ArrayList<>();

另外一个就是桶的个数。很多例子中都是给个默认大小5,开始时先遍历一遍数组,找出最大值和最小值。然后根据(max-min)/5 + 1来计算出桶的个数。我们这里做简化处理,因为知道输入数组元素值得范围大致为0到99,可以按0-9,10-19...90-99这样划分为10组,所以取桶的个数为10。

2.2 映射函数

这一步的映射函数的作用是根据数组中的元素值,计算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值