排序算法-桶排序1

一句话总结:空间换速度,空间损耗量大,但速度快!

 

桶排序的基本思想:

假设有一组长度为N的待排序列A[1....n]处于某一个较确定的区间内.另外还有一个辅助数组B[o,n-1]来存放待排序列中的元素,而数组B就相当于桶的集合。然后将A内的元素以某一个规则放入到数组B中对应的位置(即对应的桶中),最后将数组B中非空桶的元素依次输出。

 

适用范围:

数据的长度需大致相同,且在一个较集中的范围内

待排序元素越均匀, 桶排序的效率越高.

 

基本步骤:

1、设置一个定量的数组当作空桶子。

2、寻访序列,并且把项目一个一个放到对应的桶子去。

3、对每个不是空的桶子进行排序。

4、从不是空的桶子里把项目依次输出。

 

算法分析:

桶排序基于映射函数i=f(k)  其中,i 为桶数组a的下标(即第i个桶), k为待排序列的关键字。如果关键字k1<k2,那么f(k1)<=f(k2)。也就是说a(i)中的最小数据都要大于a(i-1)中最大数据。很显然,映射函数的确定与数据本身的特点有很大的关系,我们下面举个例子:    

1、 假如待排序列K= {5、 3 、 10、8 、 2、 4 、5、 7 }。

2、 这些数据全部在1—10之间。因此我们定制10个桶,且每个桶内的初始值为0,然后确定映射函数f(k)=i(i=k){式1}。


3、 若有一个符合条件的k进入桶中,桶中值变为a(i)= a(i)+1(式2)。

4、 第一个关键字5将定位到下角标为5的桶中,即第5个桶中,此时桶a(5)执行式2,a(5)中的值变为1。

5、 第二个到第六个元素以此桶中,第七个元素与第一个重复,此时再以此执行式2,a(5)中元素变为2.,然后将第八个元素归入第七个桶中,得到如下图所示:


6、 然后在非空桶内排序,按顺序输出:2、3、4、5、5、7、8、10


代码:


 

优点:

1,桶排序利用函数的映射关系,减少了一大部分的比较工作。

2,桶排序是常见排序里最快的一种。

3, 对于数据范围较几种,且有规律的一列数,非常使用

 

缺点:

1,如果输入数据非常庞大,而桶的数量也非常多,则空间代价无疑是昂贵的。

2,使用范围有限,如果数据量大,且数据分布范围广,则不适宜 


启示:

桶排序对于一系列有规律且在一定范围的数值排序是相当快的,根据桶排序的使用范围以及优点,可以将其运用在有规律的字符串的“排序”,比如身份证,汽车车牌号,甚至是酒店的房号等,然后发挥它的最大价值。

评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木子松的猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值