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 相关文章推荐
python2.7的编码问题与解决方法
Oct 04 Python
Python常见字典内建函数用法示例
May 14 Python
Python使用Phantomjs截屏网页的方法
May 17 Python
python 将字符串完成特定的向右移动方法
Jun 11 Python
python 抓包保存为pcap文件并解析的实例
Jul 23 Python
python实现PID算法及测试的例子
Aug 08 Python
python 魔法函数实例及解析
Sep 25 Python
Windows下python3安装tkinter的问题及解决方法
Jan 06 Python
使用python实现下载我们想听的歌曲,速度超快
Jul 09 Python
Python改变对象的字符串显示的方法
Aug 01 Python
django 获取字段最大值,最新的记录操作
Aug 09 Python
python实战之一步一步教你绘制小猪佩奇
Apr 22 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 开发环境配置(测试开发环境)
2010/04/28 PHP
php简单socket服务器客户端代码实例
2015/05/18 PHP
详解Yii实现分页的两种方法
2017/01/14 PHP
laravel 实现根据字段不同值做不同查询
2019/10/23 PHP
JavaScript link方法入门实例(给字符串加上超链接)
2014/10/17 Javascript
JS+CSS实现实用的单击输入框弹出选择框的方法
2015/02/28 Javascript
基于JavaScript实现瀑布流效果(循环渐近)
2016/01/27 Javascript
javascript实现九宫格相加数值相等
2020/05/28 Javascript
JavaScript新增样式规则(推荐)
2016/07/19 Javascript
angular.js之路由的选择方法
2016/09/24 Javascript
jquery实现一个全局计时器(商城可用)
2017/06/30 jQuery
jQuery实现动态控制页面元素的方法分析
2017/12/20 jQuery
QRCode.js二维码生成并能长按识别
2018/10/16 Javascript
jQuery zTree插件使用简单教程
2019/08/16 jQuery
[01:15:18]2014 DOTA2国际邀请赛中国区预选赛 LGD VS Speed Gaming.cn
2014/05/22 DOTA
python导入时小括号大作用
2017/01/10 Python
PyCharm 设置SciView工具窗口的方法
2019/01/15 Python
用Python将结果保存为xlsx的方法
2019/01/28 Python
啥是佩奇?使用Python自动绘画小猪佩奇的代码实例
2019/02/20 Python
matplotlib实现显示伪彩色图像及色度条
2019/12/07 Python
Win下PyInstaller 安装和使用教程
2019/12/25 Python
python如何使用Redis构建分布式锁
2020/01/16 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
2020/02/28 Python
Python 找出出现次数超过数组长度一半的元素实例
2020/05/11 Python
浅谈keras使用中val_acc和acc值不同步的思考
2020/06/18 Python
Python调用JavaScript代码的方法
2020/10/27 Python
深入浅析css3 中display box使用方法
2015/11/25 HTML / CSS
澳大利亚礼品卡商店:Gift Card Store
2019/06/24 全球购物
日本最大化妆品和美容产品的综合口碑网站:cosme shopping
2019/08/28 全球购物
世界汽车零件:World Car Parts
2019/09/04 全球购物
专业毕业生个性的自我评价
2013/10/03 职场文书
共产党员承诺书
2014/03/25 职场文书
合唱兴趣小组活动总结
2014/07/10 职场文书
运动会报道稿300字
2014/10/02 职场文书
php 防护xss,PHP的防御XSS注入的终极解决方案
2021/04/01 PHP
sqlserver连接错误之SQL评估期已过的问题解决
2022/03/23 SQL Server