python实现计数排序与桶排序实例代码


Posted in Python onMarch 28, 2019

计数排序

  1. 找到给定序列的最小值与最大值
  2. 创建一个长度为最大值-最小值+1的数组,初始化都为0
  3. 然后遍历原序列,并为数组中索引为当前值-最小值的值+1
  4. 此时数组中已经记录好每个值的数量,自然也就是有序的了

例如:

python实现计数排序与桶排序实例代码

计数排序实现

下面为列表的计数排序

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. 桶排序与计数排序类似,但可以解决非整数的排序
  2. 桶排序相当于把计数数组划分为按顺序的几个部分
  3. 每一部分叫做一个桶,它来存放处于该范围内的数
  4. 然后再对每个桶内部进行排序,可以使用其他排序方法如快速排序
  5. 最后整个桶数组就是排列好的数据,再将其返回给原序列

举例:

python实现计数排序与桶排序实例代码

桶排序实现

这里选择桶的数量为序列元素个数+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计数排序与桶排序详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
理解Python中的With语句
Feb 02 Python
Python发送以整个文件夹的内容为附件的邮件的教程
May 06 Python
在Python中使用sort()方法进行排序的简单教程
May 21 Python
Python2实现的LED大数字显示效果示例
Sep 04 Python
详解Python locals()的陷阱
Mar 26 Python
Python之NumPy(axis=0 与axis=1)区分详解
May 27 Python
Django框架基础模板标签与filter使用方法详解
Jul 23 Python
Python 中的 global 标识对变量作用域的影响
Aug 12 Python
Atom Python 配置Python3 解释器的方法
Aug 28 Python
python实现文件分片上传的接口自动化
Nov 19 Python
pytorch finetuning 自己的图片进行训练操作
Jun 05 Python
浅谈Python数学建模之线性规划
Jun 23 Python
python实现AES和RSA加解密的方法
Mar 28 #Python
python简单实现AES加密和解密
Mar 28 #Python
Python中dict和set的用法讲解
Mar 28 #Python
python3.x实现base64加密和解密
Mar 28 #Python
python实现AES加密解密
Mar 28 #Python
详解python tkinter教程-事件绑定
Mar 28 #Python
Python中捕获键盘的方式详解
Mar 28 #Python
You might like
php继承的一个应用
2011/09/06 PHP
解析yahoo邮件用phpmailer发送的实例
2013/06/24 PHP
php文件管理基本功能简单操作
2017/01/16 PHP
laravel自定义分页效果
2017/07/23 PHP
图像替换新技术 状态域方法
2010/01/28 Javascript
jQuery EasyUI API 中文文档 - NumberSpinner数值微调器使用介绍
2011/10/21 Javascript
jQuery插件简单实现方法
2015/07/18 Javascript
JS自定义选项卡函数及用法实例分析
2015/09/02 Javascript
两种方法解决javascript url post 特殊字符转义 + & #
2016/04/13 Javascript
初识简单却不失优雅的Vue.js
2016/09/12 Javascript
分分钟玩转Vue.js组件
2016/10/25 Javascript
jQuery实现滚动条滚动到子元素位置(方便定位)
2017/01/08 Javascript
详解如何让InstantClick兼容MathJax、百度统计等
2017/09/12 Javascript
js统计页面上每个标签的数量实例代码
2018/05/29 Javascript
如何为vuex实现带参数的 getter和state.commit
2019/01/04 Javascript
ElementUI中el-tree节点的操作的实现
2020/02/27 Javascript
[00:32]2016完美“圣”典风云人物:Maybe宣传片
2016/12/05 DOTA
python实现逆波兰计算表达式实例详解
2015/05/06 Python
深入解析Python的Tornado框架中内置的模板引擎
2016/07/11 Python
Python进阶学习之特殊方法实例详析
2017/12/01 Python
使用python读取txt文件的内容,并删除重复的行数方法
2018/04/18 Python
完美解决python中ndarray 默认用科学计数法显示的问题
2018/07/14 Python
Django中ORM外键和表的关系详解
2019/05/20 Python
python 定义类时,实现内部方法的互相调用
2019/12/25 Python
Python中zip函数如何使用
2020/06/04 Python
CSS3制作圆角图片和椭圆形图片
2016/07/08 HTML / CSS
美国男装连锁零售商:Men’s Wearhouse
2016/10/14 全球购物
销售行政专员职责
2014/01/03 职场文书
更夫岗位责任制
2014/02/11 职场文书
委托书的写法
2014/08/30 职场文书
教师党员整改措施
2014/10/24 职场文书
酒店总经理岗位职责
2015/04/01 职场文书
《学会看病》教学反思
2016/02/17 职场文书
大学生如何逃脱“毕业季创业队即散伙”魔咒?
2019/08/19 职场文书
升级 Win11 还是坚守 Win10?微软 Win11 新系统缺失功能大盘点
2022/04/05 数码科技
vue配置型表格基于el-table拓展之table-plus组件
2022/04/12 Vue.js