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 相关文章推荐
pygame学习笔记(3):运动速率、时间、事件、文字
Apr 15 Python
对Python中9种生成新对象的方法总结
May 23 Python
python读取有密码的zip压缩文件实例
Feb 08 Python
Python中捕获键盘的方式详解
Mar 28 Python
用Python画一个LinkinPark的logo代码实例
Sep 10 Python
Python 3.8正式发布重要新功能一览
Oct 17 Python
Django中modelform组件实例用法总结
Feb 10 Python
使用python采集Excel表中某一格数据
May 14 Python
Python3基于print打印带颜色字符串
Jul 06 Python
python修改微信和支付宝步数的示例代码
Oct 12 Python
Python爬虫教程之利用正则表达式匹配网页内容
Dec 08 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+Html+缓存
2006/12/20 PHP
php多个文件及图片上传实例详解
2014/11/10 PHP
PHP中ID设置自增后不连续的原因分析及解决办法
2016/08/21 PHP
setTimeout函数兼容各主流浏览器运行执行效果实例
2013/06/13 Javascript
Jquery方式获取iframe页面中的 Dom元素
2014/05/07 Javascript
JavaScript 动态加载脚本和样式的方法
2015/04/13 Javascript
JavaScript点击按钮后弹出透明浮动层的方法
2015/05/11 Javascript
JS日期加减,日期运算代码
2015/11/05 Javascript
KnockoutJS 3.X API 第四章之表单submit、enable、disable绑定
2016/10/10 Javascript
利用SpringMVC过滤器解决vue跨域请求的问题
2018/02/10 Javascript
JavaScript遍历数组的方法代码实例
2020/01/14 Javascript
Vue表单控件数据绑定方法详解
2020/02/05 Javascript
解决vue2中使用elementUi打包报错的问题
2020/09/22 Javascript
Js跳出两级循环方法代码实例
2020/09/22 Javascript
在IIS服务器上以CGI方式运行Python脚本的教程
2015/04/25 Python
5种Python单例模式的实现方式
2016/01/14 Python
python函数的万能参数传参详解
2019/07/26 Python
Python批量安装卸载1000个apk的方法
2020/04/10 Python
python异常处理之try finally不报错的原因
2020/05/18 Python
Django实现任意文件上传(最简单的方法)
2020/06/03 Python
django rest framework使用django-filter用法
2020/07/15 Python
Python异常处理机制结构实例解析
2020/07/23 Python
Python extract及contains方法代码实例
2020/09/11 Python
python实现感知机模型的示例
2020/09/30 Python
利用Python实现自动扫雷小脚本
2020/12/17 Python
Matplotlib中rcParams使用方法
2021/01/05 Python
使用javascript和HTML5 Canvas画的四渐变色播放按钮效果
2014/04/10 HTML / CSS
html5实现多图片预览上传及点击可拖拽控件
2018/03/15 HTML / CSS
兰芝美国网上商城:购买LANEIGE睡眠面膜等
2017/06/30 全球购物
感恩寄语大全
2014/04/11 职场文书
入党现实表现材料
2014/12/23 职场文书
求职自荐信怎么写
2015/03/04 职场文书
汽车4S店前台接待岗位职责
2015/04/03 职场文书
大国崛起日本观后感
2015/06/02 职场文书
平凡的世界读书笔记
2015/06/25 职场文书
高中历史教学反思
2016/02/19 职场文书