python利用空列表进行数字排序(python实现计数排序与桶排序实例代码)
类别:脚本大全 浏览量:2374
时间:2021-10-24 10:44:04 python利用空列表进行数字排序
python实现计数排序与桶排序实例代码计数排序
- 找到给定序列的最小值与最大值
- 创建一个长度为最大值-最小值+1的数组,初始化都为0
- 然后遍历原序列,并为数组中索引为当前值-最小值的值+1
- 此时数组中已经记录好每个值的数量,自然也就是有序的了
例如:
计数排序实现
下面为列表的计数排序
|
def count_sort(s): """计数排序""" # 找到最大最小值 min_num = min (s) max_num = max (s) # 计数列表 count_list = [ 0 ] * (max_num - min_num + 1 ) # 计数 for i in s: count_list[i - min_num] + = 1 s.clear() # 填回 for ind,i in enumerate (count_list): while i ! = 0 : s.append(ind + min_num) i - = 1 if __name__ = = '__main__' : a = [ 3 , 6 , 8 , 4 , 2 , 6 , 7 , 3 ] count_sort(a) print (a) |
计数排序的缺点
当数值中有非整数时,计数数组的索引无法分配
桶排序
桶排序原理:
- 桶排序与计数排序类似,但可以解决非整数的排序
- 桶排序相当于把计数数组划分为按顺序的几个部分
- 每一部分叫做一个桶,它来存放处于该范围内的数
- 然后再对每个桶内部进行排序,可以使用其他排序方法如快速排序
- 最后整个桶数组就是排列好的数据,再将其返回给原序列
举例:
桶排序实现
这里选择桶的数量为序列元素个数+1,范围分别是5等分与最大值,和上面那个图一样。
具体问题应该按照具体情况进行桶划分
这里桶内部排序直接调用了sorted
|
def bucket_sort(s): """桶排序""" min_num = min (s) max_num = max (s) # 桶的大小 bucket_range = (max_num - min_num) / len (s) # 桶数组 count_list = [ [] for i in range ( len (s) + 1 )] # 向桶数组填数 for i in s: count_list[ int ((i - min_num) / / bucket_range)].append(i) s.clear() # 回填,这里桶内部排序直接调用了sorted for i in count_list: for j in sorted (i): s.append(j) if __name__ = = '__main__' : a = [ 3.2 , 6 , 8 , 4 , 2 , 6 , 7 , 3 ] bucket_sort(a) print (a) # [2, 3, 3.2, 4, 6, 6, 7, 8] |
总结
计数排序与桶排序都是以牺牲空间换时间,虽然很快,但由于可能产生大量的空位置导致内存增大,尤其是计数排序。
桶排序中尽量使每个桶中的元素个数均匀分布最好
以上所述是小编给大家介绍的python计数排序与桶排序详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对开心学习网网站的支持!
原文链接:https://www.cnblogs.com/sfencs-hcy/p/10612422.html
您可能感兴趣
- python什么是深拷贝什么是浅拷贝(Python深拷贝与浅拷贝用法实例分析)
- python如何实现日期自动增加(Python脚本按照当前日期创建多级目录)
- 微信昵称python(Python 微信之获取好友昵称并制作wordcloud的实例)
- python云服务技术(Python脚本修改阿里云的访问控制列表的方法)
- python统计图参数(Python使用统计函数绘制简单图形实例代码)
- python ip代理池(Python 实现域名解析为ip的方法)
- pythonflask怎么设置(python flask安装和命令详解)
- python成绩判断系统(Python根据成绩分析系统浅析)
- 怎么用python实现链表(Python3实现的判断回文链表算法示例)
- python基础知识重点(python语言元素知识点详解)
- python怎么设置matlab编程(实例详解Matlab 与 Python 的区别)
- python如何遍历列表并提取(Python同步遍历多个列表的示例)
- python发送钉钉消息(钉钉群自定义机器人消息Python封装的实例)
- python简易翻译器的运行(Python3.6实现带有简单界面的有道翻译小程序)
- python飞机大战游戏背景(python实现飞机大战游戏)
- python的def命令参数(python ddt数据驱动最简实例代码)
- 赵薇时胖时瘦 最近变美少女 原因在这里 躺着就变瘦(赵薇时胖时瘦最近变美)
- 学会这26种姿势,你就可以和兵哥哥切磋了(你就可以和兵哥哥切磋了)
- 吴彦祖陈冠希 恩怨 ,失去曾让他流泪的女友,终遇走过18年真爱(吴彦祖陈冠希恩怨)
- 痴情男神 吴彦祖 与妻子恋爱8年,结婚10年,家庭幸福美满(痴情男神吴彦祖)
- 成功破圈,小牛电动SQi强势开 跨(小牛电动SQi强势开)
- 挑战新国标电自天花板,九号机械师MMAX 110P深度体验(挑战新国标电自天花板)
热门推荐
- 在html中使用javascript实例代码(原生 JS+CSS+HTML 实现时序图的方法)
- css中ul li的用法
- 织梦cms怎么调用(织梦CMS采集时keywords字段无法添加过滤规则的解决方法)
- python线程池有几种(对python 多线程中的守护线程与join的用法详解)
- 检查表单数据是否改变
- python处理所有异常(Python异常处理知识点总结)
- python响应处理post请求(Python3模拟curl发送post请求操作示例)
- sqlserver字符串截取填充(SQL Server实现split函数分割字符串功能及用法示例)
- dede收录查询插件(dede:likearticle文章标签和tag标签关联错误解决方法)
- 虚拟主机管理系统干什么用(五大免费主机管理系统优缺点对比及推荐)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9