算法分析之桶排序

概述

桶排序示意图(当然这里只是简单的示例,真正的桶排序比这个复杂):

桶排序

维基百科介绍: 桶排序

实现思路:

1. 设置固定空桶数
2. 将数据放到对应的空桶中
3. 将每个不为空的桶进行排序
4. 拼接不为空的桶中的数据,得到结果

简单示例:

BucketSort

算法分析:

时间复杂度:

    1. 将数据装入桶,需要N次循环
    2. 之后排序,需要M次循环
    3. 假设使用比较先进的排序算法,需要时间复杂度为O(N*logN)
    4. 平均时间复杂度为线性的O(N+C),其中C=N*(logN-logM)
    5. 最小时间复杂度O(N),此时 M=N

空间复杂度:

M个桶的额外空间,以及N个元素的额外空间,O(N+M)

稳定性:

一般来说桶排序是稳定的

算法优化:

    1. 桶排序的优化需要从排序上下功夫,尽量做到如下两点
    2. N个数都符合均匀分布,每一个桶中有N/M个数据
    3. 尽量的增大桶的数量,极限情况下每个桶只能得到一个数据,但是会增加空间复杂度

特点总结:

1. 桶排序是稳定的
2. 桶排序是常见排序里最快的一种,比快排还要快…(大多数情况下)
3. 桶排序非常快,但是同时也非常耗空间,(基本上是最耗空间的一种排序算法)

注意事项

桶排序是一个简单快速的排序,需要新建一个 大范围的数组,即Buckets,因此桶排序有其局限性,适合元素值集合并不大的情况。

参考文章:排序算法之桶排序的深入理解以及性能分析
最快最简单的排序算法:桶排序

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值