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的另外几种语言实现
Jan 29 Python
讲解Python中的标识运算符
May 14 Python
python中sys.argv参数用法实例分析
May 20 Python
Django中URLconf和include()的协同工作方法
Jul 20 Python
python下os模块强大的重命名方法renames详解
Mar 07 Python
django模板语法学习之include示例详解
Dec 17 Python
浅谈python爬虫使用Selenium模拟浏览器行为
Feb 23 Python
Python实现读取字符串按列分配后按行输出示例
Apr 17 Python
python Elasticsearch索引建立和数据的上传详解
Aug 04 Python
谈谈Python:为什么类中的私有属性可以在外部赋值并访问
Mar 05 Python
Python 字符串池化的前提
Jul 03 Python
详解Scrapy Redis入门实战
Nov 18 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 万年历实现代码
2012/10/18 PHP
php 下载保存文件保存到本地的两种实现方法
2013/08/12 PHP
php使用MySQL保存session会话的方法
2015/06/18 PHP
PHP7 新特性详细介绍
2016/09/06 PHP
php实现socket推送技术的示例
2017/12/20 PHP
php实现小程序支付完整版
2018/10/09 PHP
一个用js实现的页内搜索代码
2007/05/23 Javascript
url 编码 js url传参中文乱码解决方案
2010/04/11 Javascript
javascript break指定标签打破多层循环示例
2014/01/20 Javascript
Javascript连接多个数组不用concat来解决
2014/03/24 Javascript
Jquery倒计时源码分享
2014/05/16 Javascript
关注jquery技巧提高jquery技能(前端开发必学)
2015/11/02 Javascript
javascript发送短信验证码实现代码
2015/11/12 Javascript
jQuery获取父元素节点、子元素节点及兄弟元素节点的方法
2016/04/14 Javascript
js倒计时简单实现代码
2016/08/11 Javascript
纯JS实现简单的日历
2017/06/26 Javascript
详解jQuery中的easyui
2018/09/02 jQuery
解决vue-cli项目打包出现空白页和路径错误的问题
2018/09/04 Javascript
node.js的http.createServer过程深入解析
2019/06/06 Javascript
原生js实现抽奖小游戏
2019/06/27 Javascript
[44:39]2014 DOTA2国际邀请赛中国区预选赛 NE VS CNB
2014/05/21 DOTA
Python3.2中Print函数用法实例详解
2015/05/19 Python
Python基于正则表达式实现计算器功能
2020/07/13 Python
使用简单的CSS3属性实现炫酷读者墙效果
2014/01/08 HTML / CSS
买卖正宗运动鞋:GOAT
2019/12/06 全球购物
Linux面试经常问的文件系统操作命令
2016/10/04 面试题
材料化学应届生求职信
2013/10/09 职场文书
销售总监岗位职责
2014/01/04 职场文书
共产党员公开承诺书
2014/03/25 职场文书
《第一朵杏花》教学反思
2014/04/16 职场文书
主题党日活动总结
2014/07/08 职场文书
小学五年级语文上册教学计划
2015/01/22 职场文书
教师求职自荐信
2015/03/26 职场文书
酒吧七夕情人节宣传语
2015/11/24 职场文书
2016年公共机构节能宣传周活动总结
2016/04/05 职场文书
详解Mysq MVCC多版本的并发控制
2022/04/29 MySQL