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 中random模块的常用方法总结
Jul 08 Python
python3+PyQt5实现自定义分数滑块部件
Apr 24 Python
深入分析python中整型不会溢出问题
Jun 18 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
Oct 14 Python
python清除字符串前后空格函数的方法
Oct 21 Python
selenium+python截图不成功的解决方法
Jan 30 Python
浅析python的Lambda表达式
Feb 27 Python
python子线程退出及线程退出控制的代码
Oct 16 Python
基于Python获取docx/doc文件内容代码解析
Feb 17 Python
django 解决自定义序列化返回处理数据为null的问题
May 20 Python
浅析Python 抽象工厂模式的优缺点
Jul 13 Python
python 爬取B站原视频的实例代码
Sep 09 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 PDO属性设置与操作方法分析
2018/12/27 PHP
PHP fprintf()函数用法讲解
2019/02/16 PHP
用tip解决Ext列宽度不够的问题
2008/12/13 Javascript
js chrome浏览器判断代码
2010/03/28 Javascript
浅析JavaScript中的同名标识符优先级
2013/12/06 Javascript
jquery预览图片实现鼠标放上去显示实际大小
2014/01/16 Javascript
页面加载完成后再执行JS的jquery写法以及区别说明
2014/02/22 Javascript
jQuery应用之jQuery链用法实例
2015/01/19 Javascript
javascript模块化简单解析
2016/04/07 Javascript
Bootstrap的Refresh Icon也spin起来
2016/07/13 Javascript
JavaScript6 let 新语法优势介绍
2016/07/15 Javascript
jQuery中slidedown与slideup方法用法示例
2016/09/16 Javascript
Angular将填入表单的数据渲染到表格的方法
2017/09/22 Javascript
phantomjs导出html到pdf的方法总结
2017/10/19 Javascript
Node.js创建HTTP文件服务器的使用示例
2018/05/11 Javascript
bootstrapTable+ajax加载数据 refresh更新数据
2018/08/31 Javascript
Vue核心概念Action的总结
2019/01/18 Javascript
ant design中upload组件上传大文件,显示进度条进度的实例
2020/10/29 Javascript
浅析python 内置字符串处理函数的使用方法
2014/06/11 Python
python socket多线程通讯实例分析(聊天室)
2016/04/06 Python
Python将DataFrame的某一列作为index的方法
2018/04/08 Python
Python使用Tkinter实现滚动抽奖器效果
2020/01/06 Python
在 Python 中接管键盘中断信号的实现方法
2020/02/04 Python
canvas绘图按照contain或者cover方式适配并居中显示
2019/02/18 HTML / CSS
MCAKE蛋糕官方网站:一直都是巴黎的味道
2018/02/06 全球购物
美国迪克体育用品商店:DICK’S Sporting Goods
2018/07/24 全球购物
写一个函数返回1+2+3+…+n的值(假定结果不会超过长整型变量的范围)
2014/09/05 面试题
家长评语和期望
2014/02/10 职场文书
《乞巧》教学反思
2014/02/27 职场文书
财务管理专业求职信
2014/06/11 职场文书
医学专业自荐信
2014/06/14 职场文书
文员试用期转正自我鉴定
2014/09/14 职场文书
2014年党建工作汇报材料
2014/10/27 职场文书
2014年团队工作总结
2014/11/24 职场文书
军事博物馆观后感
2015/06/05 职场文书
Mysql数据库group by原理详解
2022/07/07 MySQL