基数排序--python3实现

基数排序的思想:借助多关键字排序,循环对各个单关键字进行排序(放到桶里去)

基数排序一般用于长度相同的元素组成的数组。首先按照最低有效数字进行排序,然后由低位向高位进行。基数排序可以看做是进行多趟桶排序。每个有效数字都在0-9之间,很适合桶排序,建10个桶很方便。

时间复杂度O(n),空间复杂度O(n)

参考:https://www.cnblogs.com/linxiyue/p/3555175.html

from random import randint

#利用列表的下标从小到大实现了排序
def RadixSort(list,d):    
    for k in range(d):#d轮排序
        s=[[] for i in range(10)]#因为每一位数字都是0~9,故建立10个桶
        '''对于数组中的元素,首先按照最低有效数字进行
           排序,然后由低位向高位进行。'''
        for i in list:
            '''对于3个元素的数组[977, 87, 960],第一轮排序首先按照个位数字相同的
               放在一个桶s[7]=[977],s[7]=[977,87],s[0]=[960]
               执行后list=[960,977,87].第二轮按照十位数,s[6]=[960],s[7]=[977]
               s[8]=[87],执行后list=[960,977,87].第三轮按照百位,s[9]=[960]
               s[9]=[960,977],s[0]=87,执行后list=[857,960,977],结束。'''
            m=int(i/(10**k)%10)
            s[m].append(i) # 977/(10**0)%10=7,s[7].append(977) ;977/10=97(小数舍去),87/100=0
            #此处利用了S的下标的大小顺序来排列,正好关键字的大小
#         print(list)
#         print("s的值为:",s)
        list=[j for i in s for j in i]#利用了for i in s,执行时会按s中下标从0开始
    return list

if __name__ == '__main__':
    a=[randint(1,999) for i in range(10)]#最多是三位数,因此d=3
    print(a)
    a=RadixSort(a,3)#将排好序的数组再赋给a!!!!
    print(a)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值