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获取远程图片大小和尺寸的方法
Mar 26 Python
python动态性强类型用法实例
May 09 Python
实例讲解Python爬取网页数据
Jul 08 Python
python最小生成树kruskal与prim算法详解
Jan 17 Python
python实现的自动发送消息功能详解
Aug 15 Python
基于django传递数据到后端的例子
Aug 16 Python
使用python快速在局域网内搭建http传输文件服务的方法
Nov 14 Python
python 使用递归实现打印一个数字的每一位示例
Feb 27 Python
Python文件操作基础流程解析
Mar 19 Python
Python描述符descriptor使用原理解析
Mar 21 Python
基于python爬取梨视频实现过程解析
Nov 09 Python
python中的被动信息搜集
Apr 29 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利用iframe实现无刷新文件上传功能的代码
2011/09/29 PHP
Laravel使用memcached缓存对文章增删改查进行优化的方法
2016/10/08 PHP
PHP缩略图生成和图片水印制作
2017/01/07 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
网页的标准,IMG不支持onload标签怎么办
2006/06/29 Javascript
jquery的ajax()函数传值中文乱码解决方法介绍
2012/11/08 Javascript
用js的document.write输出的广告无阻塞加载的方法
2014/06/05 Javascript
js实现一个链接打开两个链接地址的方法
2015/05/12 Javascript
AngularJs动态加载模块和依赖注入详解
2016/01/11 Javascript
javascript html5移动端轻松实现文件上传
2020/03/27 Javascript
Bootstrap Search Suggest使用例子
2016/12/21 Javascript
基于vue实现swipe分页组件实例
2017/05/25 Javascript
bootstrap table表格客户端分页实例
2017/08/07 Javascript
vue proxyTable 接口跨域请求调试的示例
2017/09/12 Javascript
vue中的$emit 与$on父子组件与兄弟组件的之间通信方式
2018/05/13 Javascript
vue如何在自定义组件中使用v-model
2018/05/14 Javascript
webpack4简单入门实例
2018/09/06 Javascript
JavaScript错误处理操作实例详解
2019/01/04 Javascript
详解vue中axios的使用与封装
2019/03/20 Javascript
vue-video-player 解决微信自动全屏播放问题(横竖屏导致样式错乱问题)
2020/02/25 Javascript
[02:23]DOTA2英雄基础教程 幻影长矛手
2013/12/09 DOTA
[01:02]DOTA2上海特锦赛SHOWOPEN
2016/03/25 DOTA
Python求两个list的差集、交集与并集的方法
2014/11/01 Python
使用Python编写基于DHT协议的BT资源爬虫
2016/03/19 Python
python字典改变value值方法总结
2019/06/21 Python
python 实现 hive中类似 lateral view explode的功能示例
2020/05/18 Python
Origins加拿大官网:雅诗兰黛集团高端植物护肤品牌
2017/11/19 全球购物
艺术爱好者的自我评价分享
2013/10/08 职场文书
历史专业毕业生的自我鉴定
2013/11/15 职场文书
毕业生简单求职信
2013/11/19 职场文书
具结保证书
2015/01/17 职场文书
新员工入职感想
2015/08/07 职场文书
少先大队干部竞选稿
2015/11/20 职场文书
MySQL索引知识的一些小妙招总结
2021/05/10 MySQL
浅谈redis缓存在项目中的使用
2021/05/20 Redis
关于Nginx中虚拟主机的一些冷门知识小结
2022/03/03 Servers