【Python】基数排序算法,摸鱼失败的第一天

基数排序就是将不同的位数进行  分类-----取出  从而达到不用比较进行排序

简单的演示:

        

进行个位数排序:

 将第二步分配好的结果按顺序取出,因为是按个位排序的,所以取出来的元素一定是按个位有序的,如图3所示

 

 将元素按十位放入到相应的位置,上一步的数是按个位有序的,现在按十位放入相应的位置,放入之后,对于每个位置而言,都是大数在上面,小数在下面,如图4所示

因为是从小到大排序,将元素从左往右,从下到上依次取出,如图5所示

 从而达到排序的结果。

 代码:

def radix_sort(a):
    maxData = a[0]  # 记录初始值,用它记住最大值

    for i in range(0, len(a)):  # 循环数组
        if maxData < a[i]:  # 如果  后一位>初始值
            maxData = a[i]  # 进行交换保持相比之后是大的一方
    print(maxData)

    b = 1  # 记录最大值的位数
    while maxData > 10:
        b += 1
        maxData /= 10  # 除以10来进行降位
    print(b)

    for index in range(b):
        buckets = [[] for _ in range(10)]  # 10个桶
        for x in a:  # 对每一位进行排序
            radix = int(x / (10 ** index) % 10)  # 得到每位的基数

            # 将对应的数组元素加入到相应位基数的桶中
            buckets[radix].append(x)

        j = 0
        for k in range(10):  # 有10个桶,取出第几个桶的数字
            for num in buckets[k]:  # 取出每个桶里的数字
                a[j] = num  # 放回
                j += 1
    return a


if __name__ == '__main__':
    a = [25, 17, 33, 17, 22, 13, 32, 15, 9, 25, 27, 18]
    print(radix_sort(a))

 摸鱼失败饱受折磨

排序算法之基数排序_xiaoxi_hahaha的博客-CSDN博客_基数排序怎么排

图是借他的

读书人的事怎么能叫偷呢?

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值