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 图片验证码代码
Dec 07 Python
Python实现基于权重的随机数2种方法
Apr 28 Python
python获取mp3文件信息的方法
Jun 15 Python
pycharm设置注释颜色的方法
May 23 Python
Python日志无延迟实时写入的示例
Jul 11 Python
django的ORM操作 删除和编辑实现详解
Jul 24 Python
django 微信网页授权登陆的实现
Jul 30 Python
python 项目目录结构设置
Feb 14 Python
解决numpy矩阵相减出现的负值自动转正值的问题
Jun 03 Python
python爬虫用mongodb的理由
Jul 28 Python
Django-celery-beat动态添加周期性任务实现过程解析
Nov 26 Python
Pandas的数据过滤实现
Jan 15 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
咖啡常见的种类
2021/03/03 新手入门
destoon实现调用自增数字从1开始的方法
2014/08/21 PHP
PHP进阶学习之Geo的地图定位算法详解
2019/06/19 PHP
静态的动态续篇之来点XML
2006/12/23 Javascript
11款新鲜的jQuery插件[附所有demo下载]
2011/01/24 Javascript
file控件选择上传文件确定后触发的js事件是哪个
2014/03/17 Javascript
js 获取input点选按钮的值的方法
2014/04/14 Javascript
Javascript 调用 ActionScript 的简单方法
2016/09/22 Javascript
在js代码拼接dom对象到页面上去的模板总结(必看)
2017/02/14 Javascript
Vue中的v-cloak使用解读
2017/03/27 Javascript
微信小程序 sha1 实现密码加密实例详解
2017/07/06 Javascript
node.js中axios使用心得总结
2017/11/29 Javascript
vuex操作state对象的实例代码
2018/04/25 Javascript
electron + vue项目实现打印小票功能及实现代码
2018/11/25 Javascript
react+redux仿微信聊天界面
2019/06/21 Javascript
小程序实现多个选项卡切换
2020/06/19 Javascript
vue 获取到数据但却渲染不到页面上的解决方法
2020/11/19 Vue.js
[50:15]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
Python访问纯真IP数据库脚本分享
2015/06/29 Python
tensorflow学习教程之文本分类详析
2018/08/07 Python
python数据处理 根据颜色对图片进行分类的方法
2018/12/08 Python
python实现根据文件关键字进行切分为多个文件的示例
2018/12/10 Python
python用plt画图时,cmp设置方法
2018/12/13 Python
详解Python文件修改的两种方式
2019/08/22 Python
PyCharm 2019.3发布增加了新功能一览
2019/12/08 Python
Python celery原理及运行流程解析
2020/06/13 Python
英国网上购买门:Direct Doors
2018/06/07 全球购物
工业自动化专业毕业生推荐信
2013/11/18 职场文书
打架检讨书100字
2014/01/08 职场文书
yy结婚证婚词
2014/01/10 职场文书
小区门卫值班制度
2014/01/24 职场文书
护士岗位求职应聘自荐书范文
2014/02/12 职场文书
双拥工作宣传标语
2014/06/26 职场文书
暗恋桃花源观后感
2015/06/12 职场文书
导游词之山西-五老峰
2019/10/07 职场文书
python实战之一步一步教你绘制小猪佩奇
2021/04/22 Python