python算法学习之桶排序算法实例(分块排序)


Posted in Python onDecember 18, 2013
# -*- coding: utf-8 -*-
def insertion_sort(A):
    """插入排序,作为桶排序的子排序"""
    n = len(A)
    if n <= 1:
        return A
    B = [] # 结果列表
    for a in A:
        i = len(B)
        while i > 0 and B[i-1] > a:
            i = i - 1
        B.insert(i, a);
    return B
def bucket_sort(A):
    """桶排序,伪码如下:
    BUCKET-SORT(A)
    1  n ← length[A] // 桶数
    2  for i ← 1 to n
    3    do insert A[i] into list B[floor(nA[i])] // 将n个数分布到各个桶中
    4  for i ← 0 to n-1
    5    do sort list B[i] with insertion sort // 对各个桶中的数进行排序
    6  concatenate the lists B[0],B[1],...,B[n-1] together in order // 依次串联各桶中的元素
    桶排序假设输入由一个随机过程产生,该过程将元素均匀地分布在区间[0,1)上。
    """
    n = len(A)
    buckets = [[] for _ in xrange(n)] # n个空桶
    for a in A:
        buckets[int(n * a)].append(a)
    B = []
    for b in buckets:
        B.extend(insertion_sort(b))
    return B
if __name__ == '__main__':
    from random import random
    from timeit import Timer
    items = [random() for _ in xrange(10000)]
    def test_sorted():
        print(items)
        sorted_items = sorted(items)
        print(sorted_items)
    def test_bucket_sort():
        print(items)
        sorted_items = bucket_sort(items)
        print(sorted_items)
    test_methods = [test_sorted, test_bucket_sort]
    for test in test_methods:
        name = test.__name__ # test.func_name
        t = Timer(name + '()', 'from __main__ import ' + name)
        print(name + ' takes time : %f' % t.timeit(1))
Python 相关文章推荐
Python程序中设置HTTP代理
Nov 06 Python
python如何获取服务器硬件信息
May 11 Python
python进程管理工具supervisor的安装与使用教程
Sep 05 Python
Python 编码规范(Google Python Style Guide)
May 05 Python
Python开发的十个小贴士和技巧及长常犯错误
Sep 27 Python
pytorch 自定义数据集加载方法
Aug 18 Python
Python使用get_text()方法从大段html中提取文本的实例
Aug 27 Python
python3.7将代码打包成exe程序并添加图标的方法
Oct 11 Python
python面向对象之类属性和类方法案例分析
Dec 30 Python
关于Python Tkinter Button控件command传参问题的解决方式
Mar 04 Python
python matplotlib绘制三维图的示例
Sep 24 Python
Biblibili视频投稿接口分析并以Python实现自动投稿功能
Feb 05 Python
python计算最大优先级队列实例
Dec 18 #Python
python计算最小优先级队列代码分享
Dec 18 #Python
python查找第k小元素代码分享
Dec 18 #Python
python获取beautifulphoto随机某图片代码实例
Dec 18 #Python
python使用urllib2模块获取gravatar头像实例
Dec 18 #Python
python2.7删除文件夹和删除文件代码实例
Dec 18 #Python
python使用xmlrpc实例讲解
Dec 17 #Python
You might like
利用PHP实现智能文件类型检测的实现代码
2011/08/02 PHP
PHP中实现生成静态文件的方法缓解服务器压力
2014/01/07 PHP
ThinkPHP入口文件设置及相关注意事项分析
2014/12/05 PHP
php微信公众号开发(2)百度BAE搭建和数据库使用
2016/12/15 PHP
thinkPHP框架实现生成条形码的方法示例
2018/06/06 PHP
ThinkPHP 5.x远程命令执行漏洞复现
2019/09/23 PHP
用CSS+JS实现的进度条效果效果
2007/06/05 Javascript
不用写JS也能使用EXTJS视频演示
2008/12/29 Javascript
Javascript基础教程之while语句
2015/01/18 Javascript
JavaScript Function函数类型介绍
2015/04/08 Javascript
JavaScript的Number对象的toString()方法
2015/12/18 Javascript
AngularJs Dependency Injection(DI,依赖注入)
2016/09/02 Javascript
微信小程序 获取相册照片实例详解
2016/11/16 Javascript
Vue.js基础知识小结
2017/01/13 Javascript
10道典型的JavaScript面试题
2017/03/22 Javascript
Bootstrap里的文件分别代表什么意思及其引用方法
2017/05/01 Javascript
vue.js移动端app实战1:初始配置详解
2017/07/24 Javascript
jQuery+koa2实现简单的Ajax请求的示例
2018/03/06 jQuery
《javascript少儿编程》location术语总结
2018/05/27 Javascript
layui 数据表格 点击分页按钮 监听事件的实例
2019/09/02 Javascript
ES2020系列之空值合并运算符 '??'
2020/07/22 Javascript
[44:47]Ti4 循环赛第三日 iG vs NaVi
2014/07/12 DOTA
在Python3中初学者应会的一些基本的提升效率的小技巧
2015/03/31 Python
Python基于列表list实现的CRUD操作功能示例
2018/01/05 Python
python 读取文本文件的行数据,文件.splitlines()的方法
2018/07/12 Python
Python终端输出彩色字符方法详解
2020/02/11 Python
Notino意大利:购买香水和化妆品
2018/11/14 全球购物
俄罗斯电子产品、计算机和家用电器购物网站:OLDI
2019/10/27 全球购物
英国专业美容产品在线:Mylee(从指甲到脱毛)
2020/07/06 全球购物
装潢设计实习自我鉴定
2013/09/19 职场文书
计算机工程学院个人求职信
2013/10/05 职场文书
运动会广播稿200米
2014/01/27 职场文书
领导干部作风整顿剖析材料
2014/10/11 职场文书
离职员工给领导和同事的感谢信
2015/11/03 职场文书
Django分页器的用法你都了解吗
2021/05/26 Python
用Python可视化新冠疫情数据
2022/01/18 Python