基数排序(次位优先)-Python实现

本文深入探讨了次位优先(Least Significant Digit, LSD)排序算法的实现原理及过程。通过对比数字的低位开始,逐步向更高位进行排序,特别强调了高位未定义数字默认为0的原则。文章提供了详细的Python实现代码,展示了如何对一组数字进行有效排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 次位优先-Least Significant Digit

先比较每个数字的低位,排好之后,再按更高位的数排序,以此类推
注意:高位没有数字默认为0

LSD

def LSD(seq):
    max_digit = 1 # 初始默认最大位数为1位
    # 找到最大值,更新最大位数
    max_num = max(seq) 
    while max_num > 10**max_digit:
        max_digit += 1
    
    for i in range(max_digit):
    """从低位(个位)开始,按0-9排一遍,更新一遍seq"""
        bucket = {} # 使用字典构建桶
        for x in range(10): # 设置0-9十个空桶
            bucket.setdefault(x,[])
        for x in seq:
            radix = (x//(10**i)) % 10 # 得到每位的基数
            bucket[radix].append(x) # 放入对应桶中
            
        j = 0
        for k in range(10):
            if bucket[k]: # 若桶不为空
                for ele in bucket[k]: # 将该桶中每个元素放回到数组中
                    seq[j] = ele
                    j+=1
    return seq

LSD( [64,8,512,27,729,0,1,343,125] )
res : [0, 1, 8, 27, 64, 125, 343, 512, 729]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值