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接收Gmail新邮件并发送到gtalk的方法
Mar 10 Python
Python+django实现简单的文件上传
Aug 17 Python
利用python操作SQLite数据库及文件操作详解
Sep 22 Python
Python3的介绍、安装和命令行的认识(推荐)
Oct 20 Python
python3实现zabbix告警推送钉钉的示例
Feb 20 Python
Django Rest framework频率原理与限制
Jul 26 Python
使用TensorFlow直接获取处理MNIST数据方式
Feb 10 Python
基于python的docx模块处理word和WPS的docx格式文件方式
Feb 13 Python
Python对象的属性访问过程详解
Mar 05 Python
Python读取配置文件(config.ini)以及写入配置文件
Apr 08 Python
如何教少儿学习Python编程
Jul 10 Python
使用Python将语音转换为文本的方法
Aug 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
WinXP + Apache +PHP5 + MySQL + phpMyAdmin安装全功略
2006/07/09 PHP
php防止SQL注入详解及防范
2013/11/12 PHP
php版微信公众账号第三方管理工具开发简明教程
2016/09/23 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
2019/10/16 PHP
jquery offset函数应用实例
2012/11/14 Javascript
JS两种定义方式的区别、内部原理
2013/11/21 Javascript
探讨jQuery的ajax使用场景(c#)
2013/12/03 Javascript
浅析Cookie中的Path与domain
2013/12/18 Javascript
javascript中Array()数组函数详解
2015/08/23 Javascript
javascript合并表格单元格实例代码
2016/01/03 Javascript
微信小程序利用co处理异步流程的方法教程
2017/05/20 Javascript
NodeJs中express框架的send()方法简介
2017/06/20 NodeJs
vue2.0 和 animate.css的结合使用
2017/12/12 Javascript
JQuery元素快速查找与操作
2018/04/22 jQuery
微信小程序使用swiper组件实现类3D轮播图
2018/08/29 Javascript
微信上传视频文件提示(推荐)
2018/11/22 Javascript
JQuery实现ajax请求的示例和注意事项
2018/12/10 jQuery
vue发送websocket请求和http post请求的实例代码
2019/07/11 Javascript
VUE实现吸底按钮
2021/03/04 Vue.js
[02:30]联想杯DOTA2完美世界全国高校联赛—北京站现场
2015/11/16 DOTA
[51:52]Liquid vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.24
2019/09/10 DOTA
Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
2018/02/13 Python
python如何把嵌套列表转变成普通列表
2018/03/20 Python
详解python分布式进程
2018/10/08 Python
使用python opencv对目录下图片进行去重的方法
2019/01/12 Python
django-crontab实现服务端的定时任务的示例代码
2020/02/17 Python
挪威太阳镜和眼镜网上商城:SmartBuyGlasses挪威
2016/08/20 全球购物
JAVA和C++的区别
2013/10/06 面试题
初中生期末评语大全
2014/04/24 职场文书
消防安全宣传标语
2014/06/07 职场文书
2015年大学生实习评语
2015/03/25 职场文书
乡镇安全生产月活动总结
2015/05/08 职场文书
创业计划书之暑假培训班
2019/11/09 职场文书
ant design charts 获取后端接口数据展示
2022/05/25 Javascript
3050和2060哪个好 性能差多少 差距有多大 谁更有性价比
2022/06/17 数码科技
python解析照片拍摄时间进行图片整理
2022/07/23 Python