原理
- 事先准备N个桶,每个桶代表从1到N的值。
- 将N-1个待排序数字,按照N桶的数字进行放入。
- 相同的桶放入了n次相同数字,则相应的桶的值为n。
- 遍历N个桶,只要桶中的值大于0,则输出序号,值为2,则输出两次该序号。
代码
|
|
结论
桶排序实际上只需要遍历一遍所有的元素,然后依次放入制定的位置。如果加上输出排序的时间,那么时间复杂度为O(n+m),n:待排序的元素个数,m:桶的个数。很快,但是空间消耗比较大。
元素跨度越大,空间消耗越大,空间利用率越低,浪费越大。
但是 快 !
适用场景
数据分布相对均匀,跨度不太大的场景。
改进
利用类似散列表的方式,改善空间利用率。