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 05 Python
Python中list初始化方法示例
Sep 18 Python
Python实现购物系统(示例讲解)
Sep 13 Python
python批量设置多个Excel文件页眉页脚的脚本
Mar 14 Python
wxPython实现窗口用图片做背景
Apr 25 Python
Python正则匹配判断手机号是否合法的方法
Dec 09 Python
python 将大文件切分为多个小文件的实例
Jan 14 Python
详解用python自制微信机器人,定时发送天气预报
Mar 25 Python
详解Python数据可视化编程 - 词云生成并保存(jieba+WordCloud)
Mar 26 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
Jun 08 Python
python3.7中安装paddleocr及paddlepaddle包的多种方法
Nov 27 Python
pytorch 6 batch_train 批训练操作
May 28 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
50个比较实用jQuery代码段
2011/09/18 Javascript
javascript中动态加载js文件多种解决办法总结
2013/11/15 Javascript
javascript 循环调用示例介绍
2013/11/20 Javascript
ExtJS4中的requires使用方法示例介绍
2013/12/03 Javascript
jQuery的:parent选择器定义和用法
2014/07/01 Javascript
angular简介和其特点介绍
2015/01/29 Javascript
AngualrJS中每次$http请求时的一个遮罩层Directive
2016/01/26 Javascript
jquery结合html实现中英文页面切换
2016/11/29 Javascript
Mongoose经常返回e11000 error的原因分析
2017/03/29 Javascript
Angularjs按需查询实例代码
2017/10/30 Javascript
node使用Mongoose类库实现简单的增删改查
2018/11/08 Javascript
如何使用 vue + d3 画一棵树
2018/12/03 Javascript
vue分页插件的使用方法
2019/12/25 Javascript
es6函数之rest参数用法实例分析
2020/04/18 Javascript
[04:53]DOTA2英雄基础教程 祈求者
2014/01/03 DOTA
[00:18]天涯墨客三技能展示
2018/08/25 DOTA
使用 Python 实现简单的 switch/case 语句的方法
2018/09/17 Python
使用Python如何测试InnoDB与MyISAM的读写性能
2018/09/18 Python
pytorch 调整某一维度数据顺序的方法
2018/12/08 Python
python实现Flappy Bird源码
2018/12/24 Python
python-opencv 将连续图片写成视频格式的方法
2019/01/08 Python
Django Rest framework解析器和渲染器详解
2019/07/25 Python
python函数定义和调用过程详解
2020/02/09 Python
HTML5拖拉上传文件的简单实例
2017/01/11 HTML / CSS
Foot Locker澳洲官网:美国运动服和鞋类零售商
2019/10/11 全球购物
会计应聘求职信范文
2013/12/17 职场文书
同学聚会主持词
2014/03/18 职场文书
运动会口号大全
2014/06/07 职场文书
公司庆典欢迎词
2015/01/26 职场文书
英文慰问信范文
2015/03/24 职场文书
商场收银员岗位职责
2015/04/07 职场文书
保护地球的宣传语
2015/07/13 职场文书
毕业欢送会致辞
2015/07/29 职场文书
python如何读取.mtx文件
2021/04/22 Python
Python 批量下载阴阳师网站壁纸
2021/05/19 Python
Python自动化之批量处理工作簿和工作表
2021/06/03 Python