桶排序的时间复杂度是O(M+N),通过建立对原始数据的有序统计表,实现非常快速的排序过程

可以用hashtable(或者dict)实现,查询复杂度为O(1)

贴代码:

 # 简单桶排序 从小到大
def bucksort(A): bucks = dict() # 桶
for i in A:
bucks.setdefault(i,[]) # 每个桶默认为空列表
bucks[i].append(i) # 往对应的桶中添加元素 A_sort = []
for i in range(min(A), max(A)+1):
if i in bucks: # 检查是否存在对应数字的桶
A_sort.extend(bucks[i]) # 合并桶中数据 return A_sort

下面是运行结果:

# 对单纯整数数列进行排序
A = [2,3,5,4,6,7,3,3,0,8,5]
a = bucksort(A)
print a >>> [0, 2, 3, 3, 3, 4, 5, 5, 6, 7, 8]

《啊哈》中还提到了对非数字类型排序时,桶排序的应用,其思路也可以用python这样实现:

假设我们要对学生进行按分数排序:

 # 包含其他元素的桶排序
# element:人名,分数
class Person:
def __init__(self,name,score):
self.name = name
self.score = score
def __repr__(self): # 覆写打印输出 print Person()
return self.name + "-" + str(self.score) def bucksort2(A):
bucks = dict()
for a in A:
bucks.setdefault(a.score,[]) # 以个人分数为评价排列标准
bucks[a.score].append(a) # 在相同分数的桶中添加人 A_sort = []
scorelist = [a.score for a in A] # 将人员列表中所有人的分数取出
for i in range(min(scorelist), max(scorelist)+1):
if i in bucks:
A_sort.extend(bucks[i]) return A_sort

输出结果:

    # 对人进行排序
B = [Person('huhu',5),Person('haha',3),Person('xixi',5),Person('hengheng',2),Person('gaoshou',8)]
b = bucksort2(B)
print b >>> [hengheng-2, haha-3, huhu-5, xixi-5, gaoshou-8]

python数据结构与算法——桶排序的更多相关文章

  1. Python 数据结构与算法——桶排序

    #简单的桶排序 def bucksort(A): bucks = dict() # 定义一个桶变量,类型为字典 for i in A: bucks.setdefault(i,[]) # 每个桶默认为空 ...

  2. python 数据结构与算法之排序(冒泡,选择,插入)

    目录 数据结构与算法之排序(冒泡,选择,插入) 为什么学习数据结构与算法: 数据结构与算法: 算法: 数据结构 冒泡排序法 选择排序法 插入排序法 数据结构与算法之排序(冒泡,选择,插入) 为什么学习 ...

  3. Python数据结构与算法(排序)

    https://www.cnblogs.com/fwl8888/p/9315730.html

  4. python数据结构与算法

    最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的<啊哈算法>入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...

  5. Python数据结构与算法--算法分析

    在计算机科学中,算法分析(Analysis of algorithm)是分析执行一个给定算法需要消耗的计算资源数量(例如计算时间,存储器使用等)的过程.算法的效率或复杂度在理论上表示为一个函数.其定义 ...

  6. 在Object-C中学习数据结构与算法之排序算法

    笔者在学习数据结构与算法时,尝试着将排序算法以动画的形式呈现出来更加方便理解记忆,本文配合Demo 在Object-C中学习数据结构与算法之排序算法阅读更佳. 目录 选择排序 冒泡排序 插入排序 快速 ...

  7. javascript数据结构与算法--高级排序算法

    javascript数据结构与算法--高级排序算法 高级排序算法是处理大型数据集的最高效排序算法,它是处理的数据集可以达到上百万个元素,而不仅仅是几百个或者几千个.现在我们来学习下2种高级排序算法-- ...

  8. Python数据结构与算法--List和Dictionaries

    Lists 当实现 list 的数据结构的时候Python 的设计者有很多的选择. 每一个选择都有可能影响着 list 操作执行的快慢. 当然他们也试图优化一些不常见的操作. 但是当权衡的时候,它们还 ...

  9. javascript数据结构与算法--高级排序算法(快速排序法,希尔排序法)

    javascript数据结构与算法--高级排序算法(快速排序法,希尔排序法) 一.快速排序算法 /* * 这个函数首先检查数组的长度是否为0.如果是,那么这个数组就不需要任何排序,函数直接返回. * ...

随机推荐

  1. 十八、AWT绘图技术

    1.Graphics 实现各类图形.文本和图片的绘制操作. 2.绘图颜色和笔画属性 (1)颜色属性 Color col= new Color(int r,int g,int b) Color col ...

  2. JS事件委托学习(转)

    JS 事件委托就是利用冒泡原理,把事件加到父级上触发,执行效果. 好处: 1.提高性能 2.新添加的元素还会有之前的事件     <</</</</li></ ...

  3. spark1.5 scala.collection.mutable.WrappedArray$ofRef cannot be cast to ...解决办法

    下面是我在spark user list的求助贴,很快就得到了正确回答,有遇到问题的同学解决不了也可以去上面提问. I can use it under spark1.4.1,but error on ...

  4. Security » Authorization » 介绍

    Introduction¶ 介绍 77 of 87 people found this helpful Authorization refers to the process that determi ...

  5. laravel 中 与前端的一些事4 之合并压缩静态文件

    合并压缩多个静态文件到一个文件里面,可以减少网站的http请求,稍微优化性能,提高网站的用户体验 使用elixir来实现: 敲命令 合并并压缩js和css文件

  6. hasOwnProperty,in

    hasOwnProperty,in区别: hasOwnProperty:指出一个对象是否具有指定名称的属性 in:对象是否能够访问此属性(包括直接在对象上访问和通过原型访问) 看下示例代码: (fun ...

  7. absolute和fixed

    共同点: 改变行内元素的呈现方式,display设置为block:让元素脱离文档流,不占据空间:默认会覆盖到非定位元素上. 不同点: absolute的根元素是相对于static定位以外的第一个父元素 ...

  8. hessian 协议

    什么是Hessian协议呢? 目前,Web服务技术是解决异构平台系统的集成及互操作问题的主流技术. 它所基于的XML已经是Internet上交换数据的实际标准,基于通用的进程间通信协议和网络传输协议屏 ...

  9. uva 211(dfs)

    211 - The Domino Effect Time limit: 3.000 seconds A standard set of Double Six dominoes contains 28 ...

  10. HDU 1231:最大连续子序列 解题报告

    第一次写博客, 自己总结写出了一道题感觉值得保存. 自己总结的规律:求最大连续子序列, 可以先求包括第N项在内的前N项最大值, (因为每一项都求过后, 前N项最大值最大的那一个元素所连续的序列即为最大 ...