原理
- 多关键字排序:加入现有一个1员工表,要求按照薪资排序,薪资相同的员工按照年龄排序
- 对32,13,94,17,54,93可进行多关键字排序——先个位再十位
步骤
- 按照个位分桶
- 输出
- 按照十位分桶
- 输出
def radix_sort(li):
max_num = max(li)
it = 0
# 判断进行多少次排序——还可以用log10
while 10 ** it <= max_num:
buckets = [[]for _ in range(10)]
for var in li:
digit = (var // 10 ** it) % 10 # 10**it很巧妙
buckets[digit].append(var)
# 分桶完成
# 把数重新写回li
li.clear()
for buc in buckets:
li.extend(buc) # 把一个列表加到后面
it += 1
li = [32, 13, 94, 17, 54, 93, 213, 101]
radix_sort(li)
print(li)
复杂度
- 时间复杂度 O ( k n ) O(kn) O(kn)
- 空间复杂度 O ( K + n ) O(K+n) O(K+n)
- k表示数字位数