9种排序算法---基数排序算法

        基数排序法与计数排序法一样,排序过程都需要借用桶来进行。基数排序的主要思路是:关键字n放入第n个桶,然后按序号将非空的桶连接在一起。关键字n就是将每个数据按个位,十位,百位.....进行分割而产生的

 具体代码如下:

def radix_sort(arr):
    # 找到最大值,确定最大位数
    max_val = max(arr)
    max_len = len(str(max_val))

    # 从个位开始,依次进行排序
    for i in range(max_len):
        # 创建10个桶,用于存放每一位上的数字
        buckets = [[] for _ in range(10)]

        # 将每个数字放入对应的桶中
        for num in arr:
            digit = (num // 10**i) % 10
            buckets[digit].append(num)

        # 将桶中的数字依次取出,放入原数组中
        arr = [num for bucket in buckets for num in bucket]

    return arr

print(radix_sort([345,345,234,67,342,234]))

代码解释:

        (1)有这样一组数列,现在我们对其进行递增排序

         (2)无论是个位,十位,还是百位都是由数字0~9组成,因此创建0~9号桶

        (3) 将数据按个位分类

        (4) 按照桶号顺序,将数据从各桶中取出来

        (5)创建0~9号桶 

        (6) 再将数据按十位分类

        (7) 按照桶号顺序,将数据从各桶中取出来

        (8)创建0~9号桶 

 

        (9)  再将数据按百位分类

        (10) 按照桶号顺序,将数据从各桶中取出来

        (11)至此排序结束,返回结果 

 小结:

        基数排序适用于整数排序,特别是当整数范围较大时,其时间复杂度为O(d*(n+b)),其中d是数字的位数,b是进制数(这里是10),n是数组长度。对于小范围整数排序,其效率可能不如快速排序、归并排序等比较型排序算法。

注意事项

  • 基数排序是稳定的排序算法,即相等的元素在排序后保持原来的顺序。
  • 基数排序的空间复杂度为O(n+b),其中b是进制数。
  • 基数排序适用于整数排序,不适用于浮点数或字符串排序。
  • 基数排序的时间复杂度依赖于数字的位数和进制数,对于大范围整数排序,可能需要更多的位数和桶。
平均时间复杂度最坏时间复杂度空间复杂度
基数排序算法O(n*b)O(n*b)O(n+b)

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值