桶排序

(注:本文只讨论最简单的桶排序算法,实际开发中的桶排序要复杂得多)
在理解桶排序算法之前,我们先来假设一种生活情境:

农村的孩子都应该拔过萝卜,萝卜拔了之后土地里会留下一个与萝卜大小一致的坑。试想一下,如果我们的坑是按从大到小的顺序排列的,那么我们要给萝卜大小排序,是不是只要将萝卜对应的插入到它的坑里就排好了呢?

一个萝卜一个坑,这是一句老话,但也是桶排序的原理。有人会问,一个萝卜一个坑,那多个相同大小的萝卜怎么办呢?简单,有多少相同萝卜就给那个坑记多少次数就好啦。

接下来我们以具体的数来进行说明桶排序吧。

比如:7,11,5,7,20。这五个数,我设置51个桶(或者坑),从0—50,然后将这5个数对应的填入到0-50对应与之相等的桶中,并做好计数。也就是5计数为1,7计数为2,11计数为1,20计数为1,其余计数为0。然后从50-0循环打印出桶中数据,嵌套循环为打印次数,比如打印7时打印2次。

下面贴上实现代码(C语言版):
这里写图片描述

下面是测试结果:
这里写图片描述

桶排序的优缺点:
优点:
1.快速简单。可以看出,桶排序主要由两个for循环,一个是桶的循环,假设桶最大为m,for(i=0;i<m;i++);另一个是待排列数的循环,假设有n个待排数,for(j=0;j<n;j++)。整个排序一共执行了m+n+m+n次,时间复杂度为O(m+n+m+n),即O(2*(m+n)),忽略常数为O(m+n)。所以桶排序的时间复杂度为O(M+N)。可以说这是一种非常高效的排序算法。
缺点:
1.桶排序虽然高效,但是非常占空间资源。
2.桶排序只能对整型数据进行排序。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值