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 uuid模块使用实例
Apr 08 Python
Python中getattr函数和hasattr函数作用详解
Jun 14 Python
Python如何判断数独是否合法
Sep 08 Python
关于Python正则表达式 findall函数问题详解
Mar 22 Python
Python中的异常处理try/except/finally/raise用法分析
Feb 28 Python
详解python编译器和解释器的区别
Jun 24 Python
python3 反射的四种基本方法解析
Aug 26 Python
python 协程中的迭代器,生成器原理及应用实例详解
Oct 28 Python
python实现删除列表中某个元素的3种方法
Jan 15 Python
python给图像加上mask,并提取mask区域实例
Jan 19 Python
selenium3.0+python之环境搭建的方法步骤
Feb 01 Python
Python基础之赋值,浅拷贝,深拷贝的区别
Apr 30 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二维数组排序的函数分享
2014/01/17 PHP
PHP实现搜索相似图片
2015/09/22 PHP
Yii2实现跨mysql数据库关联查询排序功能代码
2017/02/10 PHP
JavaScript高级程序设计 读书笔记之八 Function类及闭包
2012/02/27 Javascript
js 获取屏幕各种宽高的方法(浏览器兼容)
2013/05/15 Javascript
JS实现拖动示例代码
2013/11/01 Javascript
使用jquery实现放大镜效果
2014/09/02 Javascript
js流动式效果显示当前系统时间
2016/05/16 Javascript
chrome浏览器如何断点调试异步加载的JS
2016/09/05 Javascript
详解Vue.js基于$.ajax获取数据并与组件的data绑定
2017/05/26 Javascript
JavaScript生成图形验证码
2020/08/24 Javascript
webpack踩坑之路图片的路径与打包
2017/09/05 Javascript
vue-cli项目中使用Mockjs详解
2018/05/14 Javascript
js+html5实现手机九宫格密码解锁功能
2018/07/30 Javascript
基于nodejs的雪碧图制作工具的示例代码
2018/11/05 NodeJs
ES6 Array常用扩展的应用实例分析
2019/06/26 Javascript
Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】
2017/07/27 Python
Python实现两款计算器功能示例
2017/12/19 Python
利用Python批量提取Win10锁屏壁纸实战教程
2018/03/27 Python
Python查看微信撤回消息代码
2018/06/07 Python
Anaconda和ipython环境适配的实现
2020/04/22 Python
python os模块常用的29种方法使用详解
2020/06/02 Python
Python加载数据的5种不同方式(收藏)
2020/11/13 Python
python 通过exifread读取照片信息
2020/12/24 Python
CSS3之transition实现下划线的示例代码
2018/05/30 HTML / CSS
H5新属性audio音频和video视频的控制详解(推荐)
2016/12/09 HTML / CSS
荷兰皇家航空公司中国官网:KLM中国
2017/12/13 全球购物
Notino法国:购买香水和化妆品
2019/04/15 全球购物
俄罗斯最大的灯具网站:Fandeco
2020/03/14 全球购物
技校生自我鉴定
2013/12/08 职场文书
致跳远运动员广播稿
2014/02/11 职场文书
给校长的建议书200字
2014/05/16 职场文书
教师一帮一活动总结
2014/07/08 职场文书
副总经理岗位职责范本
2014/09/30 职场文书
2015年秋季小班开学寄语
2015/05/27 职场文书
vue组件vue-esign实现电子签名
2022/04/21 Vue.js