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实现把数字转换成中文
Jun 29 Python
由浅入深讲解python中的yield与generator
Apr 05 Python
1分钟快速生成用于网页内容提取的xslt
Feb 23 Python
TensorFlow实现Logistic回归
Sep 07 Python
Python使用random.shuffle()打乱列表顺序的方法
Nov 08 Python
浅谈python的dataframe与series的创建方法
Nov 12 Python
详解Python3中setuptools、Pip安装教程
Jun 18 Python
Python matplotlib学习笔记之坐标轴范围
Jun 28 Python
Python 硬币兑换问题
Jul 29 Python
浅析python 中大括号中括号小括号的区分
Jul 29 Python
TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
Apr 08 Python
python使用ctypes库调用DLL动态链接库
Oct 22 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程序员工具
2008/05/26 PHP
求PHP数组最大值,最小值的代码
2011/10/31 PHP
PHP判断表单复选框选中状态完整例子
2014/06/24 PHP
php替换字符串中间字符为省略号的方法
2015/05/04 PHP
php及codeigniter使用session-cookie的方法(详解)
2017/04/06 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
用JavaScript对JSON进行模式匹配 (Part 2 - 实现)
2010/07/17 Javascript
Asp.net下利用Jquery Ajax实现用户注册检测(验证用户名是否存)
2010/09/12 Javascript
jquery isEmptyObject判断是否为空对象的函数
2011/02/14 Javascript
js中的string.format函数代码
2020/08/11 Javascript
javascript检查浏览器是否支持flash的实现代码
2014/08/14 Javascript
JS获取时间的方法
2015/01/21 Javascript
js图片跟随鼠标移动代码
2015/11/26 Javascript
js实现简单的选项卡效果
2017/02/23 Javascript
jquery中封装函数传递当前元素的方法示例
2017/05/05 jQuery
npm国内镜像 安装失败的几种解决方案
2017/06/04 Javascript
vue组件表单数据回显验证及提交的实例代码
2018/08/30 Javascript
提升node.js中使用redis的性能遇到的问题及解决方法
2018/10/30 Javascript
从零到一详聊创建Vue工程及遇到的常见问题
2019/04/25 Javascript
JS实现可切换图片的幻灯切换效果示例
2019/05/24 Javascript
JavaScript前端开发时数值运算的小技巧
2020/07/28 Javascript
[01:03:22]LGD vs OG 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
重命名批处理python脚本
2013/04/05 Python
Python使用bs4获取58同城城市分类的方法
2015/07/08 Python
Python实现的KMeans聚类算法实例分析
2018/12/29 Python
Python网络爬虫之爬取微博热搜
2019/04/18 Python
python tkiner实现 一个小小的图片翻页功能的示例代码
2020/06/24 Python
python 浮点数四舍五入需要注意的地方
2020/08/18 Python
python之openpyxl模块的安装和基本用法(excel管理)
2021/02/03 Python
外贸业务员的岗位职责
2013/11/23 职场文书
消防器材管理制度
2014/01/28 职场文书
教研活动总结
2014/04/28 职场文书
反四风个人对照检查材料
2014/09/26 职场文书
毕业生实习期转正自我鉴定
2014/09/26 职场文书
《爱的教育》读书心得
2014/11/08 职场文书
教你一步步实现一个简易promise
2021/11/02 Javascript