基数排序

基数排序

基数排序(也叫桶排序)是一种很特别的排序方法,它不是基于比较进行排序的,而是采用多关键字排序思想(即基于关键字各位的大小进行排序的),借助“分配”和“收集”两种操作对单逻辑关键字进行排序。基数排序又分为最高位优先(MSD)排序和最低位优先(LSD)排序

分析

LSD

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

MSD

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
#代码实现

LSD

```
from random import randint

def RadixSort(list, d):
    for k in range(d): #d是列表内数字的最大位数, 易知需进行d轮排序
        s = [[] for i in range(10)] #建立0-9十个桶

        for i in list:# 分配 收集
            s[i // (10**k) % 10].append(i)
            print(s)
        print('*****************')
        list = [j for i in s for j in i]
    return list #有序列表

a = [53, 3, 542, 748, 14, 214, 154, 63, 616]
a = RadixSort(a, 3)
print(a)
```

MSD

```
未完待续
```

总结

  1. 关键字数量为n,关键字的位数为d,比如748 d=3,r为关键字的基的个数,就是组成关键字的数据的种类,比如十进制数字一共有0至9一共10个数字,即r=10

  2. 空间复杂度:需要开辟关键字基的个数个队列,所以空间复杂度为O®

  3. 时间复杂度:需要进行关键字位数d次"分配"和"收集",一次"分配"需要将n个关键字放进各个队列中,一次"收集"需要将r个桶都收集一遍。所以一次"分配"和一次"收集"时间复杂度为O(n+r)。d次就需要O(d(n+r))的时间复杂度

  4. 稳定性:由于是队列,先进先出的性质,所以在分配的时候是按照先后顺序分配,也就是稳定的,所以收集的时候也是保持稳定的。即基数排序是稳定的排序算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值