C语言实现排序算法---桶(箱)排序

来源:互联网 发布:云平台网络架构 编辑:程序博客网 时间:2024/06/06 02:20

上一篇写了C语言排序算法中的希尔排序,下面这一篇和大家分享一下桶排序(BucketSort)。

桶排序(BucketSort)也叫箱排序。顾名思义,我们在排序的时候,需要用到“桶”或者“箱子”这样的东西来存放元素。当然,正如你所料,在编程工作中,我们一般用数组来存放这些东西。


那么现在问题来了,我们应该如何使用这些箱子呢。首先,我们需要按照特性给这些箱子分一下类:现在假如我要给100个1000以内的数据排序。那么我们需要10个桶,并编号0~9,因为我们观察会发现,这些数据无非就是0~9组成的。而刚好数组能很好的解决这一问题,比如:int arr[10][LENGTH],下标0~9刚好分别代表了这10个桶。

可是说好10个“”,为什么定义的是一个二维数组呢?0~9只能解决编号的问题,而作为“桶”是需要装东西的,所以我们需要的是一个二维数组。LENGTH代表的是待排序数组的个数,因为我们需要考虑极端情况,如果这些元素都是一个特性的,那么一个“桶”就必须要保证能全部容纳的下才行。

那么,我们排序的这个特性到底是什么呢?其实桶排序就是先给个位数相同的装进一个“桶”,然后还原,再给十位数相同的装进一个“桶”...一次类推。

下面附上一张图:


另外一点值得注意的就是:每次给数据分类时都必须要把“桶”清空一下才行,也就是图上的42~47行。

桶排序是典型的以空间换时间的一种排序算法。

下面是完成的源码:

希望大家能有所收获,也欢迎指正!

原创粉丝点击