mysqlorderby数字字符串排序_八大排序 python实现 精讲(八)基数排序

news/2024/7/5 18:13:11 标签: mysqlorderby数字字符串排序

f61c4ba0a7ccc836ca4c1a02e6444b38.png

终于来到了八大排序的收尾之作~基数排序!之前补充了快排和堆排序的代码与总结,不要忘记补课哦~

基数排序(Radix Sort)

算法思想

基数排序的原理相对于其它方法来说,比较新颖有趣。它将数字按照位数(个十百)切分,然后按每个位数分别比较。对于数字长度不一致情况,将高位(前面)补零。该方法为最低位优先法LSD(Least sgnificant digital)。

举个例子:随机生成一个array: [23, 34, 38, 17, 16, 26, 12, 26, 14, 43]

f981e3918d883a95e8babdd40c253ddb.png

从0-9,一共10个桶,首先,从左到右,按照个位把它们放到对应桶里:

0: 
1:
2: 12
3: 23,43
4: 34,14
5:
6: 16,26,26
7: 17
8: 38
9: 

然后把这些数字串起来:[12,23,43,34,14,16,26,26,17,38]

根据串起来后的顺序,按照十位把它们放到对应桶里:

0:
1: 12,14,16,17
2: 23,26,26
3: 34,38
4:43
5:
6:
7:
8:
9:

然后把这些数字串起来:[12,14,16,17,23,26,26,34,38,43]

由于数字最大只到十位,所以到此完成排序。

动图示例来自网络。

e91f7ceb2ba235434bfc009579dc9076.gif
图片来自网络

算法步骤

LSD基数排序

  1. 统计数字最大位数,将不满最大位数的数字高位补0;
  2. 从最低位开始,根据位数数字,将对应元素分配至对应桶中;
  3. 从0-9,串起桶中数字,形成新序列;
  4. 位数前进一位,根据新序列继续排序,直到遍历结束最高位,结束。

代码实现

def Radix_Sort(array):
    i = 0 # 当前位数
    max_len = len(str(max(array)))
    while i < max_len:
        bucket_list =[[] for x in range(10)] 
        for x in array:
            bucket_list[int(x / (10**i)) % 10].append(x) # 把数字放到对应桶
        print(bucket_list)
        array.clear()
        for x in bucket_list:   # 再串起来
            for y in x:
                array.append(y)
        i += 1

518206d4e6e46d0a6e41ca8179f340ca.png

改进思路

经典LSD默认基数为10,就是从个位十位依次往上数。但是当数字范围跨度很大得时候,会增大复杂度。这个时候可以选择较大的基数,效果更好。

总结

基数排序时间复杂度

,k是数字位数,n是序列元素个数。
  • 这个比较好理解,对每一趟排序,都需要遍历待排序序列每个数字,放到桶中。而一共需要经历k趟排序;
  • 这也和选的基数大小有关。

基数排序空间复杂度为 :

,k是数字位数,n是序列元素个数。
  • 这里也比较好理解,创建了k个临时桶,用于存放n个元素。
由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。

下期考虑补充一下计数排序和桶排序~ 然后更新一下排序算法合集,有兴趣的同学可以继续关注哦!下期再见!

b51f41fd8eaffe23cb4e07ee8184a808.png
期待赞+关注+收藏!

http://www.niftyadmin.cn/n/934679.html

相关文章

证书文件(pfx)读取时报 “指定的网络密码不正确”

实际情况&#xff1a; 1、本地测试正确&#xff0c;发布到windows server 2003 iis6 可以正常运行 发布到 windows server 2008 上 II7就报 “指定的网络密码不正确” 日志报错为&#xff1a; C:\...\Web\CertFolder\xxxxxxx.pfxSystem.Security.Cryptography.CryptographicExc…

python线性拟合标准差_Python数据分析Use Case笔记

正在开发及维护一个自己的python库&#xff0c;主要会写一些自己平时常用的小模块&#xff0c;方便直接调用。会把小模块的demo记录在这里&#xff0c;方便查询及分享。&#xff08;注&#xff1a;所有demo均基于Random函数随机生成的数据&#xff0c;所以不代表任何实际含义。…

HTML本地测试成功后上传博客注意事项

需要注意不要跟博客已经存在的样式&#xff08;CSS&#xff09;或功能&#xff08;JavaScript&#xff09;起冲突 功能名一定不要一样 样式名尽量不一样 如果样式名一样&#xff0c;存在属性名的对应属性值尽量跟博客内相同转载于:https://www.cnblogs.com/tufujie/p/5072431.h…

ECShop出现Strict Standards: Only variables should be

2019独角兽企业重金招聘Python工程师标准>>> 今天安装ecshop的时候最上面出现了一个错误提示&#xff1a;Strict Standards: Only variables should be passed by reference in F:\www.xxxx.com\cls_template.php on line 418 解决办法&#xff1a; 打开cls_templat…

Linux 下的 Nginx 反向代理配置.

最近实践中遇到了需要利用 nginx 进行反向代理服务器请求的需求&#xff0c;以前没怎么碰触过&#xff0c;因此花了1个多小时&#xff0c;快速阅览了一下nginx官网在反向代理服务中给出的基本定义&#xff1a;说实话&#xff0c;官网给予的定义是精准的&#xff0c;但对于不是很…

Linux系统MySQL大小写

为什么80%的码农都做不了架构师&#xff1f;>>> Linux系统MySQL大小写&#xff0c;设置MySQL不区分大小写&#xff0c;方法如下&#xff1a; 修改MySQL配置文件/etc/my.cnf&#xff0c;在[mysqld]最后加入lower_case_table_names1 1&#xff1a;不区分 2&#xf…

淡定啊淡定

一些前端效果在dom的事件处理上比较啰嗦&#xff0c;而公司的framework乃至browser也总是出一些奇特的现象。。 于是bug出现了&#xff0c;改着改着就不淡定了。。 事实证明必须淡定&#xff0c;不淡定你永远没能力&#xff01; 首先把自己写的代码逐一检查&#xff0c;必要时j…

专题图 图例_菜鸟记449有图表不用文字系列旋转角度+拼接,圆环图可以更漂亮!...

欢迎转发扩散点在看万一您身边的朋友用得着呢&#xff1f;各位朋友早上好&#xff0c;小菜继续和您分享经验之谈&#xff0c;截止今日小菜已分享400篇经验之谈&#xff0c;可以文章编号或关键词进行搜索以下才是今天的正式内容……摘要&#xff1a;本文介绍通过选择角度&#x…