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实现遍历windows所有窗口并输出窗口标题的方法
Mar 13 Python
Python中对元组和列表按条件进行排序的方法示例
Nov 10 Python
Django 前后台的数据传递的方法
Aug 08 Python
python3+mysql查询数据并通过邮件群发excel附件
Feb 24 Python
浅谈Python中的作用域规则和闭包
Mar 20 Python
python3实现域名查询和whois查询功能
Jun 21 Python
python实现两张图片的像素融合
Feb 23 Python
python实现身份证实名认证的方法实例
Nov 08 Python
pytorch载入预训练模型后,实现训练指定层
Jan 06 Python
Python读写csv文件流程及异常解决
Oct 20 Python
python生成word合同的实例方法
Jan 12 Python
python井字棋游戏实现人机对战
Apr 28 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 mysql索引问题
2008/06/07 PHP
PHP生成短网址方法汇总
2016/07/12 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
prototype 源码中文说明之 prototype.js
2006/09/22 Javascript
基于jQuery的淡入淡出可自动切换的幻灯插件
2010/08/24 Javascript
用JS实现3D球状标签云示例代码
2013/12/01 Javascript
JavaScript中的操作符==与===介绍
2014/12/31 Javascript
jquery Easyui快速开发总结
2015/08/20 Javascript
解决微信浏览器Javascript无法使用window.location.reload()刷新页面
2016/06/21 Javascript
jquery实现跳到底部,回到顶部效果的简单实例(类似锚)
2016/07/10 Javascript
jQuery调用Webservice传递json数组的方法
2016/08/06 Javascript
JavaScript中Object值合并方法详解
2017/12/22 Javascript
关于redux-saga中take使用方法详解
2018/02/27 Javascript
详解React项目中碰到的IE问题
2019/03/14 Javascript
vue实现中部导航栏布局功能
2019/07/30 Javascript
leaflet加载geojson叠加显示功能代码
2020/02/21 Javascript
JS中==、===你分清楚了吗
2020/03/04 Javascript
JavaScript碰撞检测原理及其实现代码
2020/03/12 Javascript
15分钟上手vue3.0(小结)
2020/05/20 Javascript
详解基于element的区间选择组件校验(交易金额)
2021/01/07 Javascript
[00:12]DAC SOLO赛卫冕冠军 VG.Paparazi灬展现SOLO技巧
2018/04/06 DOTA
python中的字典详细介绍
2014/09/18 Python
python matplotlib实现双Y轴的实例
2019/02/12 Python
jupyter 中文乱码设置编码格式 避免控制台输出的解决
2020/04/20 Python
斯凯奇美国官网:SKECHERS美国
2016/08/20 全球购物
Nike香港官网:Nike HK
2019/03/23 全球购物
照片礼物和装饰:MyPhoto
2019/11/02 全球购物
医学院学生的自我评价分享
2013/11/19 职场文书
农村婚庆司仪主持词
2014/03/15 职场文书
厨房领班竞聘演讲稿
2014/04/23 职场文书
工会趣味活动方案
2014/08/18 职场文书
小学生教师节演讲稿
2014/09/03 职场文书
暑假安全保证书
2015/02/28 职场文书
运动会班级口号霸气押韵
2015/12/24 职场文书
2019最新版股权转让及委托持股协议书范本
2019/08/07 职场文书
JavaScript实现登录窗体
2021/06/22 Javascript