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学习笔记(一)(基础入门之环境搭建)
Jun 05 Python
Python设计实现的计算器功能完整实例
Aug 18 Python
Python3中条件控制、循环与函数的简易教程
Nov 21 Python
Python处理文本换行符实例代码
Feb 03 Python
在pycharm中python切换解释器失败的解决方法
Oct 29 Python
python学生管理系统学习笔记
Mar 19 Python
python小程序实现刷票功能详解
Jul 17 Python
使用python制作游戏下载进度条的代码(程序说明见注释)
Oct 24 Python
Python enumerate() 函数如何实现索引功能
Jun 29 Python
python的launcher用法知识点总结
Aug 07 Python
解决Django响应JsonResponse返回json格式数据报错问题
Aug 09 Python
python中的测试框架
Nov 13 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 Ajax乱码
2008/04/09 PHP
php中mysql模块部分功能的简单封装
2011/09/30 PHP
PHP面向对象学习笔记之一 基础概念
2012/10/06 PHP
php IP转换整形(ip2long)的详解
2013/06/06 PHP
PHP+AJAX实现投票功能的方法
2015/09/28 PHP
PHP基于回溯算法解决n皇后问题的方法示例
2017/11/07 PHP
laravel框架模板之公共模板、继承、包含实现方法分析
2019/08/30 PHP
php连接sftp的作用以及实例代码
2019/09/23 PHP
javascript 获取表单file全路径
2009/12/31 Javascript
node.js中的fs.fchmod方法使用说明
2014/12/16 Javascript
jQuery源码解读之hasClass()方法分析
2015/02/20 Javascript
jquery序列化方法实例分析
2015/06/10 Javascript
详解angularjs利用ui-route异步加载组件
2017/05/21 Javascript
JavaScript页面加载事件实例讲解
2019/09/01 Javascript
js中调用微信的扫描二维码功能的实现代码
2020/04/11 Javascript
javascript使用正则表达式实现注册登入校验
2020/09/23 Javascript
[01:15:12]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#4Newbee VS CDEC
2016/03/03 DOTA
跟老齐学Python之不要红头文件(1)
2014/09/28 Python
python批量提交沙箱问题实例
2014/10/08 Python
Python的爬虫包Beautiful Soup中用正则表达式来搜索
2016/01/20 Python
Sublime开发python程序的示例代码
2018/01/24 Python
python爬虫实例详解
2018/06/19 Python
基于wxPython的GUI实现输入对话框(1)
2019/02/27 Python
java判断三位数的实例讲解
2019/06/10 Python
Python高并发和多线程有什么关系
2020/11/14 Python
python爬虫爬取淘宝商品比价(附淘宝反爬虫机制解决小办法)
2020/12/03 Python
Boston Proper官网:美国女装品牌
2017/10/30 全球购物
荷兰的时尚市场:To Be Dressed
2019/05/06 全球购物
求最大连续递增数字串(如"ads3sl456789DF3456ld345AA"中的"456789")
2015/09/11 面试题
致跳远运动员加油稿
2014/02/11 职场文书
五星级酒店餐饮部总监的标准岗位职责
2014/02/17 职场文书
摄影展策划方案
2014/06/02 职场文书
优秀班主任经验交流材料
2014/06/02 职场文书
就业协议书范本
2014/10/08 职场文书
2014年保安个人工作总结
2014/11/13 职场文书
高中生社会实践心得体会
2016/01/14 职场文书