桶排序

来源:互联网 发布:乔丹在奇才队的数据 编辑:程序博客网 时间:2024/05/16 13:03

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

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

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

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

比如: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 0