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使用正则表达式的search()函数实现指定位置搜索功能
Nov 10 Python
关于反爬虫的一些简单总结
Dec 13 Python
用python处理MS Word的实例讲解
May 08 Python
python3.4爬虫demo
Jan 22 Python
举例讲解Python常用模块
Mar 08 Python
python性能测量工具cProfile使用解析
Sep 26 Python
python解析命令行参数的三种方法详解
Nov 29 Python
Django单元测试中Fixtures用法详解
Feb 25 Python
Python函数默认参数常见问题及解决方案
Mar 26 Python
如何使用Python处理HDF格式数据及可视化问题
Jun 24 Python
windows10在visual studio2019下配置使用openCV4.3.0
Jul 14 Python
python实现数据结构中双向循环链表操作的示例
Oct 09 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
set_include_path和get_include_path使用及注意事项
2013/02/02 PHP
PHP获取POST数据的几种方法汇总
2015/03/03 PHP
php发送短信验证码完成注册功能
2015/11/24 PHP
php实现微信企业号支付个人的方法详解
2017/07/26 PHP
PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】
2018/04/24 PHP
php的无刷新操作实现方法分析
2020/02/28 PHP
YII2框架中查询生成器Query()的使用方法示例
2020/03/18 PHP
JavaScript 学习技巧
2010/02/17 Javascript
基于jquery实现的移入页面上空文本框时,让它变为焦点,移出清除焦点
2011/07/26 Javascript
js实现点击注册按钮开始读秒倒计时的小例子
2013/05/11 Javascript
用js动态添加html元素,以及属性的简单实例
2016/07/19 Javascript
针对后台列表table拖拽比较实用的jquery拖动排序
2016/10/10 Javascript
利用JQuery阻止事件冒泡
2016/12/01 Javascript
WebPack基础知识详解
2017/01/16 Javascript
浅谈用Webpack路径压缩图片上传尺寸获取的问题
2018/02/22 Javascript
在 Angular-cli 中使用 simple-mock 实现前端开发 API Mock 接口数据模拟功能的方法
2018/11/28 Javascript
layui的布局和表格的渲染以及动态生成表格的方法
2019/09/18 Javascript
vue项目实现图片上传功能
2019/12/23 Javascript
Python中使用MELIAE分析程序内存占用实例
2015/02/18 Python
python算法表示概念扫盲教程
2017/04/13 Python
Python实现二维数组按照某行或列排序的方法【numpy lexsort】
2017/09/22 Python
Python线程之定位与销毁的实现
2019/02/17 Python
详解python logging日志传输
2020/07/01 Python
CSS3制作皮卡丘动画壁纸的示例
2020/11/02 HTML / CSS
Otel.com:折扣酒店预订
2017/08/24 全球购物
美国市场上最实惠的送餐服务:Dinnerly
2018/03/18 全球购物
网络工程与软件技术毕业生自荐信
2013/09/24 职场文书
护理学毕业生自荐信
2013/10/02 职场文书
竞职演讲稿范文
2014/01/11 职场文书
教学实验楼管理制度
2014/02/01 职场文书
保险公司年会主持词
2014/03/22 职场文书
艺术教育实施方案
2014/05/03 职场文书
会计系毕业生求职信
2014/05/28 职场文书
学校领导班子四风问题整改意见
2014/10/02 职场文书
投标文件签署授权委托书范本
2014/10/12 职场文书
某学校的2019年度工作报告范本
2019/10/11 职场文书