基于python进行桶排序与基数排序的总结


Posted in Python onMay 29, 2018

本文首先举例阐述了两种排序方法的操作步骤,然后列出了用python进行的实现过程,最后对桶式排序方法的优劣进行了简单总结。

一、桶排序:

排序一个数组[5,3,6,1,2,7,5,10]

值都在1-10之间,建立10个桶:

[0 0 0 0 0 0 0 0 0 0] 桶

[1 2 3 4 5 6 7 8 9 10] 桶代表的值

遍历数组,第一个数字5,第五个桶加1

[0 0 0 0 1 0 0 0 0 0]

第二个数字3,第三个桶加1

[0 0 1 0 1 0 0 0 0 0]

遍历后

[1 1 1 0 2 1 1 0 0 1]

输出

[1 2 3 5 5 6 7 10]

代码:

def bucket_sort(lst):
 buckets = [0] * ((max(lst) - min(lst))+1)
 for i in range(len(lst)):
  buckets[lst[i]-min(lst)] += 1
 res=[]
 for i in range(len(buckets)):
  if buckets[i] != 0:
   res += [i+min(lst)]*buckets[i]
 return res

二、基数排序:

例如,对如下数据序列进行排序。

192,221,12,23

可以观察到它的每个数据至多只有3位,因此可以将每个数据拆分成3个关键字:百位(高位)、十位、个位(低位)。如果按照习惯思维,会先比较百位,百位大的数据大,百位相同的再比较十位,十位大的数据大;最后再比较个位。基数排序方法对任一子关键字排序时必须借助于另一种排序方法,而且这种排序方法必须是稳定的。对于多关键字拆分出来的子关键字,它们一定位于0-9这个可枚举的范围内,这个范围不大,因此用桶式排序效率非常好。

代码:

from random import randint
def radix_sort(lis,d):
 for i in xrange(d):#d轮排序
  s = [[] for k in xrange(10)]#因为每一位数字都是0~9,故建立10个桶
  for j in lis:
   s[j/(10**i)%10].append(i)
  li = [a for b in s for a in b]
 return li

对数组中的元素按照从低位到高位排序,对于[192,221,12,23]第一轮按照个位数字相同的放在一组,是s[1] =[221],s[2]=[192,12],s[3]=23,第二轮按照十位数字进行排序,s[1]=[12],s[2]=[221,23],s[9]=[192],第三轮按照百位数字进行排序,s[0]=[12,23],s[1]=[192],s[2]=[221]

总结:

桶排序与基数排序常作为桶式排序出现,基数排序进行了多轮的桶排序。桶式排序不再是一种基于比较的排序方法,它是一种比较巧妙的排序方式,但这种排序方式需要待排序的序列满足以下两个特征:待排序列所有的值处于一个可枚举的范围之类;待排序列所在的这个可枚举的范围不应该太大,否则排序开销太大。可以用于学生成绩的排序,因为在若干学生中成绩的范围仅在100以内。

桶式排序的空间开销较大,它需要两个数组,第1个buckets数组用于记录“落入”各桶中元素的个数,进而保存各元素在有序序列中的位置,第2个数组用于缓存待排数据。它只能排整形数组。而且当k较大,而数组长度n较小,即k>>n时,辅助数组C[k+1]的空间消耗较大。

以上这篇基于python进行桶排序与基数排序的总结就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python聊天程序实例代码分享
Nov 18 Python
Django框架下在视图中使用模版的方法
Jul 16 Python
python中文分词,使用结巴分词对python进行分词(实例讲解)
Nov 14 Python
python实现决策树分类算法
Dec 21 Python
Python登录并获取CSDN博客所有文章列表代码实例
Dec 28 Python
详解Django中类视图使用装饰器的方式
Aug 12 Python
Python实现的简单线性回归算法实例分析
Dec 26 Python
在Python 中实现图片加框和加字的方法
Jan 26 Python
python pygame实现球球大作战
Nov 25 Python
python 爬虫基本使用——统计杭电oj题目正确率并排序
Oct 26 Python
Pytorch实验常用代码段汇总
Nov 19 Python
Python爬取梨视频的示例
Jan 29 Python
Vue的el-scrollbar实现自定义滚动
May 29 #Python
基于Django与ajax之间的json传输方法
May 29 #Python
django ajax json的实例代码
May 29 #Python
Python+selenium实现自动循环扔QQ邮箱漂流瓶
May 29 #Python
PyTorch学习笔记之回归实战
May 28 #Python
Django 使用Ajax进行前后台交互的示例讲解
May 28 #Python
Python实现爬虫爬取NBA数据功能示例
May 28 #Python
You might like
PHP4在WinXP下IIS和Apache2服务器上的安装实例
2006/10/09 PHP
在php中取得image按钮传递的name值
2006/10/09 PHP
PHP Memcached + APC + 文件缓存封装实现代码
2010/03/11 PHP
ThinkPHP标签制作教程
2014/07/10 PHP
理解Javascript_06_理解对象的创建过程
2010/10/15 Javascript
javascript ajax 仿百度分页函数
2013/10/29 Javascript
js微信分享API
2020/10/11 Javascript
JS前向后瞻正则表达式定义与用法示例
2016/12/27 Javascript
Angular 4依赖注入学习教程之Injectable装饰器(六)
2017/06/04 Javascript
js 获取元素的具体样式信息getcss(实例讲解)
2017/07/05 Javascript
基于javascript 显式转换与隐式转换(详解)
2017/12/15 Javascript
js实现简单的秒表
2020/01/16 Javascript
[00:48]完美“圣”典2016风云人物:xiao8宣传片
2016/11/30 DOTA
[03:33]TI9战队采访 - Infamous
2019/08/20 DOTA
简单的通用表达式求10乘阶示例
2014/03/03 Python
Python安装第三方库及常见问题处理方法汇总
2016/09/13 Python
python 采集中文乱码问题的完美解决方法
2016/09/27 Python
Python ldap实现登录实例代码
2016/09/30 Python
PyQt实现界面翻转切换效果
2018/04/20 Python
TensorFlow入门使用 tf.train.Saver()保存模型
2018/04/24 Python
python dataframe 输出结果整行显示的方法
2018/06/14 Python
对python中大文件的导入与导出方法详解
2018/12/28 Python
Python图像滤波处理操作示例【基于ImageFilter类】
2019/01/03 Python
Python获取基金网站网页内容、使用BeautifulSoup库分析html操作示例
2019/06/04 Python
Python 读取 YUV(NV12) 视频文件实例
2019/12/09 Python
python 实现让字典的value 成为列表
2019/12/16 Python
编写html5时调试发现脚本php等网页js、css等失效
2013/12/31 HTML / CSS
HTML5中使用json对象的实例代码
2018/09/10 HTML / CSS
美国独家设计师眼镜在线光学商店:Glasses Gallery
2017/12/28 全球购物
德国综合购物网站:OTTO
2018/11/13 全球购物
意大利在线药房:Farmacia Loreto Gallo
2019/08/09 全球购物
疾病防治方案
2014/05/31 职场文书
开会通知短信大全
2015/04/20 职场文书
党员转正大会主持词
2015/07/02 职场文书
python数据处理之Pandas类型转换
2022/04/28 Python
CSS 鼠标点击拖拽效果的实现代码
2022/12/24 HTML / CSS