列表排序——基数排序——python

基数排序

原理

  • 多关键字排序:加入现有一个1员工表,要求按照薪资排序,薪资相同的员工按照年龄排序
  • 对32,13,94,17,54,93可进行多关键字排序——先个位再十位

步骤

  • 按照个位分桶
  • 输出
  • 按照十位分桶
  • 输出
    ![[1496926-20191111105100993-1138235761.png]]
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表示数字位数
  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值