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程序设计入门(4)模块和包
Jun 16 Python
Django框架中方法的访问和查找
Jul 15 Python
python并发编程之多进程、多线程、异步和协程详解
Oct 28 Python
Python元字符的用法实例解析
Jan 17 Python
python求质数的3种方法
Sep 28 Python
详解Django中CBV(Class Base Views)模型源码分析
Feb 25 Python
Python3 执行Linux Bash命令的方法
Jul 12 Python
Numpy中对向量、矩阵的使用详解
Oct 29 Python
Python图像处理库PIL的ImageDraw模块介绍详解
Feb 26 Python
python实现音乐播放和下载小程序功能
Apr 26 Python
浅谈matplotlib 绘制梯度下降求解过程
Jul 12 Python
如何利用python实现列表嵌套字典取值
Jun 10 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查询相似度最高的字符串的方法
2015/03/12 PHP
php使用Jpgraph绘制复杂X-Y坐标图的方法
2015/06/10 PHP
PHP文件类型检查及fileinfo模块安装使用详解
2019/05/09 PHP
javascript调试说明
2010/06/07 Javascript
event.currentTarget与event.target的区别介绍
2012/12/31 Javascript
JQuery实现鼠标滑过显示导航下拉列表
2013/09/12 Javascript
window.returnValue使用方法示例介绍
2014/07/03 Javascript
jQuery中:last-child选择器用法实例
2014/12/31 Javascript
jQuery通过扩展实现抖动效果的方法
2015/03/11 Javascript
jQuery+Ajax实现无刷新分页
2015/10/30 Javascript
Sublime Text 3常用插件及安装方法
2015/12/16 Javascript
html5+javascript实现简单上传的注意细节
2016/04/18 Javascript
Bootstrap编写一个兼容主流浏览器的受众巨幕式风格页面
2016/07/01 Javascript
微信扫码支付零云插件版实例详解
2017/04/26 Javascript
将angular-ui的分页组件封装成指令的方法详解
2017/05/10 Javascript
Javascript Promise用法详解
2018/05/10 Javascript
微信小程序3D轮播实现代码
2019/09/19 Javascript
微信小程序如何获取用户头像和昵称
2019/09/23 Javascript
Python splitlines使用技巧
2008/09/06 Python
使用beaker让Facebook的Bottle框架支持session功能
2015/04/23 Python
Python使用Srapy框架爬虫模拟登陆并抓取知乎内容
2016/07/02 Python
《Python学习手册》学习总结
2018/01/17 Python
20个常用Python运维库和模块
2018/02/12 Python
Python3实现的爬虫爬取数据并存入mysql数据库操作示例
2018/06/06 Python
解决python打不开文件(文件不存在)的问题
2019/02/18 Python
Python 窗体(tkinter)按钮 位置实例
2019/06/13 Python
一篇文章弄懂Python中所有数组数据类型
2019/06/23 Python
python3获取文件中url内容并下载代码实例
2019/12/27 Python
windows下的pycharm安装及其设置中文菜单
2020/04/23 Python
基于CentOS搭建Python Django环境过程解析
2020/08/24 Python
python中绕过反爬虫的方法总结
2020/11/25 Python
Html5 语法与规则简要概述
2014/07/29 HTML / CSS
Ruby如何进行文件操作
2014/07/17 面试题
信息工程学院毕业生推荐信
2013/11/05 职场文书
团组织关系介绍信
2014/01/12 职场文书
入党积极分子个人总结
2015/03/02 职场文书