桶排序:
桶排序是指先开辟一个足够大的初始化数组,然后把一个待排序集合的元素作为数组的下标,将数组在该元素作为下标上的值+1。
因为数组的下标是有序的,桶排序就是先对待排序集合的元素先进行一次遍历,把每个元素都在开辟的数组上记录下来,然后再对新开辟的整个数组进行一次遍历,按顺序对值不为0的数组元素的下标进行输出。
也因此,桶排序的时间复杂度为O(N+M),是一个稳定的排序算法,但也有存在的问题,即需要开辟的空间很大,不适用与对很大的数进行排序。
《啊哈算法》对我学习桶排序有很大的帮助,所以呢,我就举一个这本书的例子。
简单的来说,有5个数,这五个数的大小都在10以内(包括10),现在对这五个数进行从大到小的排序。
比如我们给出5 3 5 2 8 这五个数
我们用桶排序的方法来做:
1、首先呢,开辟一个足够大的数组,根据题意我们开辟一个大小为11的一维数组int a[11]
。把这个一维数组初始化为0后第一步就完成了。
2、然后对待排序集合进行遍历,就是对这五个数进行一次遍历,把每一个数都作为数组a的下标,使其对应的值+1。
第一个数是5,那么就把a[5]+=1,按这个方法进行下去
进行一次遍历后得到的a数组的值为:
{0,0,1,1,0,2,0,0,1,0,0}
3、最后对数组a进行一次遍历,对值为0的元素略过,