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多线程实例教程
Sep 06 Python
Python脚本实现代码行数统计代码分享
Mar 10 Python
Python实现Windows上气泡提醒效果的方法
Jun 03 Python
Python编程中实现迭代器的一些技巧小结
Jun 21 Python
Python基于动态规划算法解决01背包问题实例
Dec 06 Python
100行python代码实现跳一跳辅助程序
Jan 15 Python
tensorflow: 查看 tensor详细数值方法
Jun 13 Python
python pandas 对时间序列文件处理的实例
Jun 22 Python
Python全栈之列表数据类型详解
Oct 01 Python
用Python实现校园通知更新提醒功能
Nov 23 Python
浅谈tensorflow中张量的提取值和赋值
Jan 19 Python
Opencv python 图片生成视频的方法示例
Nov 18 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解决URL中文GBK乱码问题的两种方法
2014/06/03 PHP
PHP获取MySql新增记录ID值的3种方法
2014/06/24 PHP
图解找出PHP配置文件php.ini的路径的方法
2014/08/20 PHP
PHP对文件进行加锁、解锁实例
2015/01/23 PHP
实现PHP+Mysql无限分类的方法汇总
2015/03/02 PHP
用JS将搜索的关键字高亮显示实现代码
2013/11/08 Javascript
javascript:void(0)是什么意思示例介绍
2013/11/17 Javascript
Node.js(安装,启动,测试)
2014/06/09 Javascript
jQuery通过控制节点实现仅在前台通过get方法完成参数传递
2015/02/02 Javascript
jquery+css3实现网页背景花瓣随机飘落特效
2015/08/17 Javascript
JavaScript模块规范之AMD规范和CMD规范
2015/10/27 Javascript
Nodejs的express使用教程
2015/11/23 NodeJs
详解AngularJS中的filter过滤器用法
2016/01/04 Javascript
node.js版本管理工具n无效的原理和解决方法
2016/11/24 Javascript
Node.js服务器开启Gzip压缩教程
2017/08/11 Javascript
ReactJS实现表单的单选多选和反选的示例
2017/10/13 Javascript
JavaScript 判断对象中是否有某属性的常用方法
2018/06/14 Javascript
nuxt.js中间件实现拦截权限判断的方法
2018/11/21 Javascript
socket在egg中的使用实例代码详解
2019/05/30 Javascript
vue组件系列之TagsInput详解
2020/05/14 Javascript
微信小程序实现选择地址省市区三级联动
2020/06/21 Javascript
[01:52]深扒TI7聊天轮盘语音出处7
2017/05/11 DOTA
详解python的webrtc库实现语音端点检测
2017/05/31 Python
python实现list由于numpy array的转换
2018/04/04 Python
Python之csv文件从MySQL数据库导入导出的方法
2018/06/21 Python
python 判断三个数字中的最大值实例代码
2019/07/24 Python
Willer台湾:日本高速巴士/夜行巴士预约
2017/07/09 全球购物
Cynthia Rowley官网:全球领先的生活方式品牌
2020/10/27 全球购物
C#笔试题和英文面试题
2013/02/07 面试题
教师实习期自我鉴定
2013/10/06 职场文书
大学生开西餐厅创业计划书
2014/02/01 职场文书
酒店大堂副理的职责范文
2014/02/13 职场文书
新闻通讯稿模板
2015/07/22 职场文书
食堂管理制度范本
2015/08/04 职场文书
vue backtop组件的实现完整代码
2021/04/07 Vue.js
Python代码实现双链表
2022/05/25 Python