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实现爬虫统计学校BBS男女比例(一)
Dec 31 Python
解决tensorflow测试模型时NotFoundError错误的问题
Jul 26 Python
Django 1.10以上版本 url 配置注意事项详解
Aug 05 Python
详解python列表(list)的使用技巧及高级操作
Aug 15 Python
python爬虫 爬取超清壁纸代码实例
Aug 16 Python
python实现宿舍管理系统
Nov 22 Python
python解析命令行参数的三种方法详解
Nov 29 Python
如何基于python对接钉钉并获取access_token
Apr 21 Python
ITK 实现多张图像转成单个nii.gz或mha文件案例
Jul 01 Python
Python Pandas数据分析工具用法实例
Nov 05 Python
python集合的新增元素方法整理
Dec 07 Python
详解python3类型注释annotations实用案例
Jan 20 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函数之error_reporting(E_ALL ^ E_NOTICE)详细说明
2011/07/01 PHP
PHP 数据结构 算法描述 冒泡排序 bubble sort
2011/07/10 PHP
php压缩HTML函数轻松实现压缩html/js/Css及注意事项
2013/01/27 PHP
PHP递归调用的小技巧讲解
2013/02/19 PHP
怎样给PHP源代码加密?PHP二进制加密与解密的解决办法
2013/04/22 PHP
PHP实现文件下载详解
2014/11/27 PHP
PHP常用函数总结(180多个)
2016/12/25 PHP
PHP实现唤起微信支付功能
2019/02/18 PHP
JavaScript事件列表解说
2006/12/22 Javascript
JS之小练习代码
2008/10/12 Javascript
jquery实现textarea输入框限制字数的方法
2015/01/15 Javascript
AngularJs 国际化(I18n/L10n)详解
2016/09/01 Javascript
d3.js实现简单的网络拓扑图实例代码
2016/11/06 Javascript
canvas学习之API整理笔记(一)
2016/12/29 Javascript
轻松理解JavaScript之AJAX
2017/03/15 Javascript
微信小程序HTTP接口请求封装的实现
2019/02/21 Javascript
使用koa2创建web项目的方法步骤
2019/03/12 Javascript
node.js 基于cheerio的爬虫工具的实现(需要登录权限的爬虫工具)
2019/04/10 Javascript
[35:43]2018DOTA2亚洲邀请赛 4.1 小组赛B组 paiN vs Effect
2018/04/03 DOTA
[42:48]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第二场 12.11
2020/12/16 DOTA
python模拟登录百度贴吧(百度贴吧登录)实例
2013/12/18 Python
python操作mongodb根据_id查询数据的实现方法
2015/05/20 Python
详解Python编程中time模块的使用
2015/11/20 Python
详解Python中的Numpy、SciPy、MatPlotLib安装与配置
2017/11/17 Python
Python判断对象是否相等及eq函数的讲解
2019/02/25 Python
python读出当前时间精度到秒的代码
2019/07/05 Python
对Python中画图时候的线类型详解
2019/07/07 Python
python3调用windows dos命令的例子
2019/08/14 Python
解决Pytorch自定义层出现多Variable共享内存错误问题
2020/06/28 Python
爱情检讨书大全
2014/01/21 职场文书
知识竞赛活动方案
2014/02/18 职场文书
党员一句话承诺大全
2014/03/28 职场文书
国家助学贷款承诺书
2015/04/30 职场文书
党组织结对共建协议书
2016/03/23 职场文书
各国货币符号大全
2022/02/17 杂记
基于docker安装zabbix的详细教程
2022/06/05 Servers