介绍
首先确定 最大的数的位数。比如:最大数是一位数,即:个位;两位数,即:十位;三位数,即:百位
定义十个桶,编号
0-9(这是固定的)先按照每个数的 个位数 排序,放入桶内,得到一个序列,桶清空;
依据上个序列,按照每个数的 十位数 排序,放入桶内,得到一个序列,桶清空;
以此类推,直到完成最大数的位数
例子
对序列 135,242,192,93,345,11,24,19 进行排序
首先确定最大的数的位数,最大的数 是 345,是 百位数,3位数,也就是说要执行 3轮
第1轮
定义十个桶,编号 0-9,按照每个数的 个位数 排序,放入桶内,如下图:
然后展开,桶清空,如下图:
第2轮
按照每个数的 十位数 排序,放入桶内,如下图:
然后展开,桶清空,如下图:
第3轮
按照每个数的 百位数 排序,放入桶内,如下图:
然后展开,桶清空,如下图:
时间复杂度
约为 O(n*k)
- n:是数组长度
- k:是最大数字的位数,表示总轮数
也可以写为:O(d∗(n+k))
- k:是基数(十进制下
k=10),固定值,大O表示法可略 - n:是数组长度
- d:是最大数字的位数,表示总轮数
空间复杂度
在排序过程中仅需要一个元素的辅助空间用于数组元素的交互
空间复杂度为 O(n+k)
- n:是数组长度
- k:是最大数字的位数,表示总轮数
是否稳定
稳定,相同值的元素排序后相对位置不变
适用场景
适合处理整数、字符串等可以按 “位” 拆分的元素排序
不适合处理浮点数(需先转换为整数)或负数(需额外处理符号位)。




