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中计算三角函数之cos()方法的使用简介
May 15 Python
浅析AST抽象语法树及Python代码实现
Jun 06 Python
轻松理解Python 中的 descriptor
Sep 15 Python
Django admin美化插件suit使用示例
Dec 12 Python
Python中最大最小赋值小技巧(分享)
Dec 23 Python
django 在原有表格添加或删除字段的实例
May 27 Python
Django 模型类(models.py)的定义详解
Jul 19 Python
python deque模块简单使用代码实例
Mar 12 Python
利用 PyCharm 实现本地代码和远端的实时同步功能
Mar 23 Python
Django中文件上传和文件访问微项目的方法
Apr 27 Python
Python3+selenium配置常见报错解决方案
Aug 28 Python
详解pycharm的python包opencv(cv2)无代码提示问题的解决
Jan 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
层叠菜单的动态生成
2006/10/09 PHP
PHP常用文件操作函数和简单实例分析
2016/06/03 PHP
PHP微信支付开发实例
2016/06/22 PHP
javascript知识点收藏
2007/02/22 Javascript
基于jQuery的固定表格头部的代码(IE6,7,8测试通过)
2010/05/18 Javascript
js弹出层之1:JQuery.Boxy (二)
2011/10/06 Javascript
JavaScript实现自动对页面上敏感词进行屏蔽的方法
2015/07/27 Javascript
javascript中Date format(js日期格式化)方法小结
2015/12/17 Javascript
浅析Bootstrap验证控件的使用
2016/06/23 Javascript
Js调用Java方法并互相传参的简单实例
2016/08/11 Javascript
基于Bootstrap框架实现图片切换
2017/03/10 Javascript
JS实现对json对象排序并删除id相同项功能示例
2018/04/18 Javascript
解决vue数组中对象属性变化页面不渲染问题
2018/08/09 Javascript
Angularjs之ngModel中的值验证绑定方法
2018/09/13 Javascript
Vue中的Props(不可变状态)
2018/09/29 Javascript
Vue面试题及Vue知识点整理
2018/10/07 Javascript
vue-cli 3.0 版本与3.0以下版本在搭建项目时的区别详解
2018/12/11 Javascript
vue使用微信扫一扫功能的实现代码
2020/04/11 Javascript
Vue Render函数创建DOM节点代码实例
2020/07/08 Javascript
Vue执行方法,方法获取data值,设置data值,方法传值操作
2020/08/05 Javascript
Python 不同对象比较大小示例探讨
2014/08/21 Python
Python3读取zip文件信息的方法
2015/05/22 Python
Java中重定向输出流实现用文件记录程序日志
2015/06/12 Python
Python常用时间操作总结【取得当前时间、时间函数、应用等】
2017/05/11 Python
Python算法之求n个节点不同二叉树个数
2017/10/27 Python
python深copy和浅copy区别对比解析
2019/12/26 Python
Django高并发负载均衡实现原理详解
2020/04/04 Python
CSS3实现10种Loading效果
2016/07/11 HTML / CSS
美国最大最全的亚洲购物网站:美国亚米网(Yamibuy)
2020/05/05 全球购物
夜大毕业自我鉴定
2013/10/11 职场文书
2014学习优秀共产党员先进事迹材料思想汇报
2014/09/14 职场文书
2015年学校关工委工作总结
2015/04/03 职场文书
医药公司开票员岗位职责
2015/04/15 职场文书
学校中层领导培训心得体会
2016/01/11 职场文书
利用Selenium添加cookie实现自动登录的示例代码(fofa)
2021/05/08 Python
Java基础之this关键字的使用
2021/06/30 Java/Android