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两种遍历字典(dict)的方法比较
May 29 Python
使用C语言来扩展Python程序和Zope服务器的教程
Apr 14 Python
python版本的读写锁操作方法
Apr 25 Python
Python使用time模块实现指定时间触发器示例
May 18 Python
python实现二叉树的遍历
Dec 11 Python
Python3生成手写体数字方法
Jan 30 Python
Python实现接受任意个数参数的函数方法
Apr 21 Python
Pandas读写CSV文件的方法示例
Mar 27 Python
PyQt5重写QComboBox的鼠标点击事件方法
Jun 25 Python
解决Django加载静态资源失败的问题
Jul 28 Python
Python dict和defaultdict使用实例解析
Mar 12 Python
Django 允许局域网中的机器访问你的主机操作
May 13 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
PHP5中的时间相差8小时的解决办法
2008/03/28 PHP
一步一步学习PHP(8) php 数组
2010/03/05 PHP
深入理解PHP原理之Session Gc的一个小概率Notice
2011/04/12 PHP
php计算到指定日期还有多少天的方法
2015/04/14 PHP
编写PHP脚本来实现WordPress中评论分页的功能
2015/12/10 PHP
php实现中文转数字
2016/02/18 PHP
利用PHP获取网站访客的所在地位置
2017/01/18 PHP
js控制div及网页相关属性的代码
2009/12/19 Javascript
javascript hashtable 修正版 下载
2010/12/30 Javascript
理解javascript中的回调函数(callback)
2014/09/02 Javascript
基于jquery实现智能提示控件intellSeach.js
2016/03/17 Javascript
JavaScript中Array的实用操作技巧分享
2016/09/11 Javascript
HTML的select控件美化
2017/03/27 Javascript
Angular限制input框输入金额(是小数的话只保留两位小数点)
2017/07/13 Javascript
vue.js配合$.post从后台获取数据简单demo分享
2018/08/11 Javascript
手把手教你如何使用nodejs编写cli命令行
2018/11/05 NodeJs
浅谈webpack性能榨汁机(打包速度优化)
2019/01/09 Javascript
vue实现输入框的模糊查询的示例代码(节流函数的应用场景)
2019/09/01 Javascript
详解简单易懂的 ES6 Iterators 指南和示例
2019/09/24 Javascript
ES6 Iterator遍历器原理,应用场景及相关常用知识拓展详解
2020/02/15 Javascript
详解Vue中的Props与Data细微差别
2020/03/02 Javascript
Javascript模拟实现new原理解析
2020/03/03 Javascript
[02:07]DOTA2新英雄展现中国元素,完美“圣典”亮相央视
2016/12/19 DOTA
[39:21]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.24
2019/09/10 DOTA
Python多继承顺序实例分析
2018/05/26 Python
Flask-Mail用法实例分析
2018/07/21 Python
解决python Markdown模块乱码的问题
2019/02/14 Python
详解python环境安装selenium和手动下载安装selenium的方法
2020/03/17 Python
Django中FilePathField字段的用法
2020/05/21 Python
python实现图书馆抢座(自动预约)功能的示例代码
2020/09/29 Python
基于 HTML5 的 WebGL 3D 版俄罗斯方块的示例代码
2018/05/28 HTML / CSS
Lookfantastic法国官网:英国知名美妆购物网站
2017/10/28 全球购物
如何强制垃圾回收
2015/10/06 面试题
幼儿园园长岗位职责
2013/11/26 职场文书
畜牧兽医本科生的自我评价
2014/03/03 职场文书
Windows Server 2019 安装DHCP服务及相关配置
2022/04/28 Servers