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画ROC曲线和AUC值计算
Sep 19 Python
Pycharm学习教程(5) Python快捷键相关设置
May 03 Python
Python中matplotlib中文乱码解决办法
May 12 Python
python写入已存在的excel数据实例
May 03 Python
在python中按照特定顺序访问字典的方法详解
Dec 14 Python
python3正则提取字符串里的中文实例
Jan 31 Python
python创造虚拟环境方法总结
Mar 04 Python
python 计算一个字符串中所有数字的和实例
Jun 11 Python
Python实现bilibili时间长度查询的示例代码
Jan 14 Python
Python filter()及reduce()函数使用方法解析
Sep 05 Python
python中strip(),lstrip(),rstrip()函数的使用讲解
Nov 17 Python
Python jieba库分词模式实例用法
Jan 13 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字符串函数的总结分析
2013/06/05 PHP
php析构函数的简单使用说明
2015/08/24 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
jscript之Open an Excel Spreadsheet
2007/06/13 Javascript
js绘制圆形和矩形的方法
2015/08/05 Javascript
浅析JavaScript作用域链、执行上下文与闭包
2016/02/01 Javascript
JQuery用户名校验的具体实现
2016/03/18 Javascript
在vue.js中抽出公共代码的方法示例
2017/06/08 Javascript
react组件从搭建脚手架到在npm发布的步骤实现
2019/01/09 Javascript
基于mpvue小程序使用echarts画折线图的方法示例
2019/04/24 Javascript
小程序实现横向滑动日历效果
2019/10/21 Javascript
Node.js API详解之 assert模块用法实例分析
2020/05/26 Javascript
weui上传多图片,压缩,base64编码的示例代码
2020/06/22 Javascript
微信小程序实现自定义动画弹框/提示框的方法实例
2020/11/06 Javascript
如何利用nodejs自动定时发送邮件提醒(超实用)
2020/12/01 NodeJs
详解js创建对象的几种方式和对象方法
2021/03/01 Javascript
使用Python编写Linux系统守护进程实例
2015/02/03 Python
Python运行报错UnicodeDecodeError的解决方法
2016/06/07 Python
python目录与文件名操作例子
2016/08/28 Python
python使用邻接矩阵构造图代码示例
2017/11/10 Python
pandas通过索引进行排序的示例
2018/11/16 Python
python使用mitmproxy抓取浏览器请求的方法
2019/07/02 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
2019/08/23 Python
调试Django时打印SQL语句的日志代码实例
2019/09/12 Python
Pycharm调试程序技巧小结
2020/08/08 Python
Python实现京东抢秒杀功能
2021/01/25 Python
HTML5新增元素如何兼容旧浏览器有哪些方法
2014/05/09 HTML / CSS
AmazeUI 图标的示例代码
2020/08/13 HTML / CSS
电话客服专员岗位职责
2014/06/28 职场文书
英文感谢信范文
2015/01/21 职场文书
父母教会我观后感
2015/06/17 职场文书
婚庆开业庆典主持词
2015/06/30 职场文书
幼儿园心得体会范文
2016/01/21 职场文书
2016年社会主义核心价值观心得体会
2016/01/21 职场文书
2019入党申请书格式
2019/06/25 职场文书
利用js实现简单开关灯代码
2021/11/23 Javascript