基数排序python

基数排序(Radix Sort),列表最大值有几位数,就按几次进行分桶装桶,通过不停的分桶和装桶来实现排序,桶里面不需要排序,因为桶已经是有序的了。

第一次按照个位数进行分桶,分桶完毕桶里面的数按个位数是排好序的,然后进行第二轮按百位数进行分桶,这时列表已经是按个位数排好序的,然后依次分到按百位数排序的桶里面,这时桶里面按百位数也是排好序的,依次类推排序完毕。

def radix_sort(li):
    max_num = max(li)   # 最大值
    it = 0  # 个位、十位、百位、千位等依次分桶
    while 10 ** it <= max_num:   # it 为装几次桶,it 从0开始计数,即从个位开始排序
        buckets = [[] for _ in range(10)]   # 分十个桶
        for val in li:
            digit = (val // 10 ** it) % 10  # 每一轮分到第几个桶里面
            buckets[digit].append(val)  # 分桶完成
        li.clear()
        for buc in buckets:  # 把数重新写回li
            li.extend(buc)
        it += 1

 

posted @ 2023-06-12 19:24  天才九少  阅读(60)  评论(0)    收藏  举报