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深入学习之特殊方法与多范式
Aug 31 Python
python妙用之编码的转换详解
Apr 21 Python
Python实现打砖块小游戏代码实例
May 18 Python
Python3 串口接收与发送16进制数据包的实例
Jun 12 Python
python SQLAlchemy 中的Engine详解
Jul 04 Python
python中的线程threading.Thread()使用详解
Dec 17 Python
python如何把字符串类型list转换成list
Feb 18 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
Feb 28 Python
python 安装库几种方法之cmd,anaconda,pycharm详解
Apr 08 Python
Python pip使用超时问题解决方案
Aug 03 Python
python 装饰器的基本使用
Jan 13 Python
python读取图片颜色值并生成excel像素画的方法实例
Feb 19 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
虫族 Zerg 魔法科技
2020/03/14 星际争霸
PHP读取XML值的代码(推荐)
2011/01/01 PHP
深入理解PHP中的Session和Cookie
2013/06/21 PHP
解析PHP中empty is_null和isset的测试
2013/06/29 PHP
老版本PHP转义Json里的特殊字符的函数
2015/06/08 PHP
完美解决Thinkphp3.2中插入相同数据的问题
2017/08/01 PHP
PHP设计模式之 策略模式Strategy详解【对象行为型】
2020/05/01 PHP
PHP实现本地图片转base64格式并上传
2020/05/29 PHP
js中几种去掉字串左右空格的方法
2006/12/25 Javascript
javascript之querySelector和querySelectorAll使用说明
2011/10/09 Javascript
Js 获取Gridview选中行的内容操作步骤
2013/02/05 Javascript
JavaScript的面向对象编程基础
2015/08/13 Javascript
jquery点击缩略图切换视频播放特效代码分享
2015/09/15 Javascript
基于JavaScript代码实现pc与手机之间的跳转
2015/12/23 Javascript
jQuery实现图像旋转动画效果
2016/05/29 Javascript
vue-router路由懒加载和权限控制详解
2017/12/13 Javascript
微信小程序实现人脸识别登陆的示例代码
2019/04/02 Javascript
解决layui调用自定义方法提示未定义的问题
2019/09/14 Javascript
easyUI使用分页过滤器对数据进行分页操作实例分析
2020/06/01 Javascript
python自动化测试之连接几组测试包实例
2014/09/28 Python
Django中对数据查询结果进行排序的方法
2015/07/17 Python
详解Django中Request对象的相关用法
2015/07/17 Python
django js实现部分页面刷新的示例代码
2018/05/28 Python
python爬虫获取新浪新闻教学
2018/12/23 Python
python图形用户接口实例详解
2019/12/16 Python
英国天然保健品网站:Simply Supplements
2017/03/22 全球购物
阿里健康大药房:阿里自营网上药店
2017/08/01 全球购物
办公室助理岗位职责
2013/12/25 职场文书
学校介绍信范文
2014/01/14 职场文书
大型晚会策划方案
2014/02/06 职场文书
2014年3.15团委活动总结
2014/03/16 职场文书
后备干部培训方案
2014/05/22 职场文书
工商局领导班子存在的问题整改措施思想汇报
2014/10/05 职场文书
社会治安综合治理责任书
2015/01/29 职场文书
离婚案件上诉状
2015/05/23 职场文书
Python爬虫之爬取二手房信息
2021/04/27 Python