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使用三角迭代计算圆周率PI的方法
Mar 20 Python
windows系统下Python环境搭建教程
Mar 28 Python
python flask 多对多表查询功能
Jun 25 Python
Python中max函数用于二维列表的实例
Apr 03 Python
python 实现调用子文件下的模块方法
Dec 07 Python
python修改txt文件中的某一项方法
Dec 29 Python
Python使用pyautocad+openpyxl处理cad文件示例
Jul 11 Python
PyTorch: 梯度下降及反向传播的实例详解
Aug 20 Python
python socket通信编程实现文件上传代码实例
Dec 14 Python
Keras中的多分类损失函数用法categorical_crossentropy
Jun 11 Python
python 实现波浪滤镜特效
Dec 02 Python
通用的Django注册功能模块实现方法
Feb 05 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
全国FM电台频率大全 - 6 辽宁省
2020/03/11 无线电
PHPwind整合最土系统用户同步登录实现方法
2010/12/08 PHP
php利用header函数下载各种文件
2016/08/24 PHP
Laravel 错误提示本地化的实现
2019/10/22 PHP
JavaScipt基本教程之前言
2008/01/16 Javascript
一段利用WSH修改和查看IP配置的代码
2008/05/11 Javascript
javascript 表单的友好用户体现
2009/01/07 Javascript
JS控制日期显示的小例子
2013/11/23 Javascript
文本框文本自动补全效果示例分享
2014/01/19 Javascript
JQuery以JSON方式提交数据到服务端示例代码
2014/05/05 Javascript
javascript实现的一个带下拉框功能的文本框
2014/05/08 Javascript
JSON.parse()和JSON.stringify()使用介绍
2014/06/20 Javascript
JavaScript中number转换成string介绍
2014/12/31 Javascript
jQuery中not()方法用法实例
2015/01/06 Javascript
JQuery select(下拉框)操作方法汇总
2015/04/15 Javascript
jquery制作属于自己的select自定义样式
2015/11/23 Javascript
vue2.0 axios前后端数据处理实例代码
2017/06/30 Javascript
js异步编程小技巧详解
2017/08/14 Javascript
vue+iview写个弹框的示例代码
2017/12/05 Javascript
vue 实现基础组件的自动化全局注册
2020/12/25 Vue.js
[01:24:51]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS NewBee第二场
2014/05/26 DOTA
python socket网络编程步骤详解(socket套接字使用)
2013/12/06 Python
Python中使用OpenCV库来进行简单的气象学遥感影像计算
2016/02/19 Python
Python读取Json字典写入Excel表格的方法
2018/01/03 Python
python读取视频流提取视频帧的两种方法
2020/10/22 Python
pytorch 数据集图片显示方法
2018/07/26 Python
python 调用钉钉机器人的方法
2019/02/20 Python
Pytorch卷积层手动初始化权值的实例
2019/08/17 Python
python实现单张图像拼接与批量图片拼接
2020/03/23 Python
html5组织内容_动力节点Java学院整理
2017/07/10 HTML / CSS
新西兰最大的在线设计师眼镜店:SmartBuyGlasses新西兰
2017/10/20 全球购物
荷兰皇家航空公司中国官网:KLM中国
2017/12/13 全球购物
单位承诺书格式
2014/05/21 职场文书
项目经理任命书
2014/06/04 职场文书
中学生纪念九一八事变演讲稿
2014/09/14 职场文书
导盲犬小Q观后感
2015/06/11 职场文书