什么是桶排序
- 比如要对一个包含数字0-1000的数字序列进行排序,如果要使用桶排序的话
- 首先给这个序列设置一个桶的区间值,比如这个数的范围是0-1000,那么我就设置0-100,100-200,200-300。。。900-1000分别为10个空桶,然后把需要排序的数,遍历一次,依次把对应的放入对应的桶中。
- 若其中的桶内的数据不为空,则对这个桶进行排序。
- 再依次按序的把每个桶的数据都按序放回原序列即可完成排序。
待排数字序列
993 321 323 12 2 239 123 341 192 432 231 343 576
桶 | 桶内元素 |
---|---|
0-100 | 12,2 |
100-200 | 123,192 |
200-300 | 231 |
300-400 | 321,341,343 |
400-500 | 432 |
500-600 | 576 |
600-700 | |
700-800 | |
800-900 | |
900-1000 | 993 |
每个内部排好序后再放回原序列或者一个新的序列列表
2 12 123 192 321 341 343 432 576 993
完成排序!
思想:桶排序最好情况下使用线性时间O(n),桶排序的时间复杂度,取决与对各个桶之间数据进行排序的时间复杂度,因为其它部分的时间复杂度都为O(n)。很显然,桶划分的越小,各个桶之间的数据越少,排序所用的时间也会越少。但相应的空间消耗就会增大。