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数据类型详解(四)字典:dict
May 12 Python
python实现SMTP邮件发送功能
Jun 16 Python
Python利用Beautiful Soup模块修改内容方法示例
Mar 27 Python
Python subprocess模块常见用法分析
Jun 12 Python
python实现黑客字幕雨效果
Jun 21 Python
解决pandas .to_excel不覆盖已有sheet的问题
Dec 10 Python
Python Django 命名空间模式的实现
Aug 09 Python
Django 实现xadmin后台菜单改为中文
Nov 15 Python
pytorch中图像的数据格式实例
Feb 11 Python
Python tcp传输代码实例解析
Mar 18 Python
Pycharm导入anaconda环境的教程图解
Jul 31 Python
Python函数__new__及__init__作用及区别解析
Aug 31 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常用的文件操作函数经典收藏
2013/04/02 PHP
php使用strtotime和date函数判断日期是否有效代码分享
2013/12/25 PHP
PHP中session变量的销毁
2014/02/27 PHP
php简单socket服务器客户端代码实例
2015/05/18 PHP
php中array_multisort对多维数组排序的方法
2020/06/21 PHP
YII2.0框架行为(Behavior)深入详解
2019/07/26 PHP
用JavaScript显示随机图像或引用
2009/04/21 Javascript
javascript 模拟点击广告
2010/01/02 Javascript
js和as的稳定传值问题解决
2013/07/14 Javascript
jquery获取URL中参数解决中文乱码问题的两种方法
2013/12/18 Javascript
jQuery中live()方法用法实例
2015/01/19 Javascript
jQuery实现的个性化返回底部与返回顶部特效代码
2015/10/30 Javascript
javascript实现密码验证
2015/11/10 Javascript
AngularJS自定义服务与fliter的混合使用
2016/11/24 Javascript
jquery 校验中国身份证号码实例详解
2017/04/11 jQuery
jQuery.ajax向后台传递数组问题的解决方法
2017/05/12 jQuery
利用node.js+mongodb如何搭建一个简单登录注册的功能详解
2017/07/30 Javascript
element-ui组件table实现自定义筛选功能的示例代码
2019/03/15 Javascript
解决vuecli3中img src 的引入问题
2020/08/04 Javascript
Python中使用PIL库实现图片高斯模糊实例
2015/02/08 Python
Python3简单实例计算同花的概率代码
2017/12/06 Python
Zookeeper接口kazoo实例解析
2018/01/22 Python
Python 多线程,threading模块,创建子线程的两种方式示例
2019/09/29 Python
python实现的读取网页并分词功能示例
2019/10/29 Python
聊聊python中的循环遍历
2020/09/07 Python
Html5 语法与规则简要概述
2014/07/29 HTML / CSS
Marks & Spencer爱尔兰:英国马莎百货
2016/04/20 全球购物
英国家具、照明、家居用品网上商店:Wayfair.co.uk
2020/02/13 全球购物
Scotch Porter官方网站:男士美容产品
2020/08/31 全球购物
美国最大最全的亚洲购物网站:美国亚米网(Yamibuy)
2020/05/05 全球购物
党的群众路线教育实践活动个人承诺书
2014/05/22 职场文书
体育节口号
2014/06/19 职场文书
品牌推广活动策划方案
2014/08/19 职场文书
教师工作自我鉴定范文
2014/09/14 职场文书
2014年教师学期工作总结
2014/11/08 职场文书
MySQL 使用事件(Events)完成计划任务
2021/05/24 MySQL