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 匹配任意字符(包括换行符)的正则表达式写法
Oct 29 Python
python字符串连接的N种方式总结
Sep 17 Python
Python中pygal绘制雷达图代码分享
Dec 07 Python
python爬取亚马逊书籍信息代码分享
Dec 09 Python
Django使用Celery异步任务队列的使用
Mar 13 Python
python批量从es取数据的方法(文档数超过10000)
Dec 27 Python
基于python判断目录或者文件代码实例
Nov 29 Python
python ImageDraw类实现几何图形的绘制与文字的绘制
Feb 26 Python
将pycharm配置为matlab或者spyder的用法说明
Jun 08 Python
Vs Code中8个好用的python 扩展插件
Oct 12 Python
pycharm实现猜数游戏
Dec 07 Python
单身狗福利?Python爬取某婚恋网征婚数据
Jun 03 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过滤XSS攻击的函数
2013/11/12 PHP
php简单实现快速排序的方法
2015/04/04 PHP
PHP框架Laravel中实现supervisor执行异步进程的方法
2017/06/07 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
JS IE和FF兼容性问题汇总
2009/02/09 Javascript
javascript prototype 原型链
2009/03/12 Javascript
模仿百度三维地图的js数据分享
2011/05/12 Javascript
计算新浪Weibo消息长度(还可以输入119字)
2013/07/02 Javascript
jquery序列化表单去除指定元素示例代码
2014/04/10 Javascript
jquery-syntax动态语法着色示例代码
2014/05/14 Javascript
JS中常用的输出方式(五种)
2016/06/12 Javascript
Bootstrap3使用typeahead插件实现自动补全功能
2016/07/07 Javascript
jQuery生成假加载动画效果
2016/12/01 Javascript
RequireJS 依赖关系的实例(推荐)
2017/01/21 Javascript
jQuery加载及解析XML文件的方法实例分析
2017/01/22 Javascript
jQuery获取复选框选中的当前行的某个字段的值
2017/09/15 jQuery
nodejs中安装ghost出错的原因及解决方法
2017/10/23 NodeJs
利用Node.js如何实现文件循环覆写
2019/04/05 Javascript
微信小程序开发之map地图组件定位并手动修改位置偏差
2019/08/17 Javascript
微信小程序官方动态自定义底部tabBar的例子
2019/09/04 Javascript
vue 组件开发原理与实现方法详解
2019/11/29 Javascript
Vue vm.$attrs使用场景详解
2020/03/08 Javascript
ant design vue导航菜单与路由配置操作
2020/10/28 Javascript
python批量生成本地ip地址的方法
2015/03/23 Python
使用Python绘制图表大全总结
2017/02/11 Python
Python实现Pig Latin小游戏实例代码
2018/02/02 Python
Python使用Django实现博客系统完整版
2020/09/29 Python
简单了解Python变量作用域正确使用方法
2020/06/12 Python
MATLAB数学建模之画图汇总
2020/07/16 Python
python 元组和列表的区别
2020/12/30 Python
python实现xml转json文件的示例代码
2020/12/30 Python
详解HTML5表单新增属性
2016/12/21 HTML / CSS
高中的职业生涯规划书
2013/12/28 职场文书
临床专业自荐信
2014/06/22 职场文书
女生节标语
2014/06/26 职场文书
2016年百日安全生产活动总结
2016/04/06 职场文书