由于桶排序算法把每个数都放到合适的“桶”里进行排序,因此而得名。桶排序的算法原理可以理解为创建一个新的数组,把数依次放入合适的桶内,再按一定顺序输出桶。
当每个桶的数据范围为 1 且数据皆为整数时,桶排序的时间复杂度在所有情况下都是 O(n),因为它是一个线性的排序算法。但是,它的空间需求要视排序数据的范围而定,所以极有可能浪费很多空间。
假设我们有 10 个整数 [1,1,3,19,35,49,50,5,10,16],它们的范围在 1~50。如图 1 所示,我们建立 50 个存放数据的桶。
图 1:建立空桶
如图 2 所示,把数据放入对应编号的桶中。然后,直接把装有元素的桶的编号输出,输出的次数以桶内元素的数量为准。
图 2:把数据放入桶中
用代码实现上述的桶排序非常简单。
桶排序代码(固定元素范围版)
countn = [0]*51 #建立足够的桶
nums,result = [1,1,3,19,35,49,50,5,1