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实现哈希表
Feb 07 Python
Python2.X/Python3.X中urllib库区别讲解
Dec 19 Python
python实现树形打印目录结构
Mar 29 Python
浅谈Python traceback的优雅处理
Aug 31 Python
如何不用安装python就能在.NET里调用Python库
Jul 12 Python
Python Tkinter模块 GUI 可视化实例
Nov 20 Python
利用django model save方法对未更改的字段依然进行了保存
Mar 28 Python
Django中的AutoField字段使用
May 18 Python
python按照list中字典的某key去重的示例代码
Oct 13 Python
使用python-cv2实现Harr+Adaboost人脸识别的示例
Oct 27 Python
Python 内存管理机制全面分析
Jan 16 Python
matplotlib之pyplot模块实现添加子图subplot的使用
Apr 25 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
搜索和替换文件或目录的一个好类--很实用
2006/10/09 PHP
IIS6的PHP最佳配置方法
2007/03/19 PHP
PHP简单实现断点续传下载的方法
2015/09/25 PHP
php有效防止图片盗用、盗链的两种方法
2016/11/01 PHP
CLASS_CONFUSION JS混淆 全源码
2007/12/12 Javascript
js两行代码按指定格式输出日期时间
2011/10/21 Javascript
jQuery显示和隐藏 常用的状态判断方法
2015/01/29 Javascript
jquery实现的Banner广告收缩效果代码
2015/09/02 Javascript
AngularJS入门教程之AngularJS指令
2016/04/18 Javascript
原生JS实现匀速图片轮播动画
2016/10/18 Javascript
bootstrap实现图片自动轮播
2016/12/21 Javascript
javascript深拷贝的原理与实现方法分析
2017/04/10 Javascript
老生常谈combobox和combotree模糊查询
2017/04/17 Javascript
Vue.js实现列表清单的操作方法
2017/11/15 Javascript
详解vue表单——小白速看
2018/04/08 Javascript
如何在js代码中消灭for循环实例详解
2018/07/29 Javascript
简单了解vue中父子组件如何相互传递值(基础向)
2019/07/12 Javascript
Vue实现兄弟组件间的联动效果
2020/01/21 Javascript
简单介绍Ruby中的CGI编程
2015/04/10 Python
解决python 无法加载downsample模型的问题
2018/10/25 Python
Python图片的横坐标汉字实例
2019/12/04 Python
python爬虫模拟浏览器的两种方法实例分析
2019/12/09 Python
基于python图像处理API的使用示例
2020/04/03 Python
python将logging模块封装成单独模块并实现动态切换Level方式
2020/05/12 Python
浅谈keras 模型用于预测时的注意事项
2020/06/27 Python
python利用 keyboard 库记录键盘事件
2020/10/16 Python
POS解决方案:MUNBYN(热敏打印机、条形码扫描仪)
2020/06/09 全球购物
车间统计员岗位职责
2014/01/05 职场文书
入学生会自荐书范文
2014/02/05 职场文书
教师网络培训感言
2014/03/09 职场文书
小学师德标兵先进事迹材料
2014/05/25 职场文书
公司踏青活动方案
2014/08/16 职场文书
学校领导班子对照检查材料
2014/08/28 职场文书
农业项目投资意向书
2015/05/09 职场文书
Python list去重且保持原顺序不变的方法
2021/04/03 Python
Python下opencv库的安装过程及问题汇总
2021/06/11 Python