桶排序算法
注意:这不是真正的桶算法,这是一个简单版的桶算法,因为比较容易让人理解,所以这是简化版,真正的桶算法要比这个复杂的多的多!请大家不要误会!只是为了考虑到大家让大家明白!OK!
用算法锻炼运算逻辑思维是一个好的想法,所以我初入算法,打算来锻炼我的运算逻辑思维!以后的日子也会研究一些简单的算法,给大家通俗易懂的解决办法!(争取让大家都能明白,小白也易懂)最起码我都能懂,比我聪明的你们研究一下更会懂得,哈哈!(滑稽)
什么是桶排序?
桶排序 (Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间(Θ(n))。但桶排序并不是 比较排序,他不受到 O(n log n) 下限的影响。
桶排序称为最快的排序,因为他不用遍历多次,直接入桶便已经是排好的顺序,打印即可。缺点是有局限性,所谓的时间换空间吧!
关于桶排序的时间复杂度推导,即使数据不服从均匀分布,只有输入数据满足下列性质:所有桶的大小的平方和与总的元素数呈线性关系,那么桶排序仍然能在线性时间完成。
下面的解题方法的桶排序虽然有局限性,但是假如把数据装在集合里可以没有那么大的局限性。
在此先详解,后带来简单易懂的桶排序解决方案。
详解:
a[0]为0,表示“0”没有出现过,不打印
a[1]为0,表示“1”没有出现过,不打印
a[2]为1,表示“2”出现过1次,打印2
a[3]为1,表示“3”出现过1次,打印3
a[4]为0,表示“4”没有出现过,打印
a[5]为2,表示“5”出现过2次,打印5、5
a[6]为0,表示“6”没有出现过,不打印
a[7]为0,表示“7”没有出现过,不打印
a[8]为1,表示“8”出现过1次,打印8
a[9]为0,表示“9”没有出现过,不打印
a[9]为0,表示“10”没有出现过,不打印
最终打印结果就是:2、3、5、5、8