算法思想:

  桶排序将数组分到有限数量的桶里。然后每个桶里再分别排序(使用任何算法)

  当要倍排序的数组内的数值时均匀分配的时候,桶排序使用线性时间O(n)

步骤:

  根据最大值、最小值、桶内数据范围设定一定数量的数组当桶,可以拿二维数组

  遍历数据,将数据放到对应的桶中

  对桶内数据进行排序(可以和上一步结合,再放入的时候就排序)

  连接桶内的元素

算法实现:

def bucket_sort3(collection,default_bucket_size=10):
'''自己写的,最快,能处理任意数据'''
def insertion2bucket(collection,num):
collection.append(num)
i=len(collection)-1
while i>=1 and collection[i-1]>num:
collection[i]=collection[i-1]#不用交换
i-=1
collection[i]=num
return collection
min_value,max_value=min(collection),max(collection)
bucket_count=(max_value-min_value)//default_bucket_size+1
bucket=[[] for i in range(bucket_count)] for i in collection:
bucket[i//(default_bucket_size+1)]=insertion2bucket(bucket[i//(default_bucket_size+1)],i)
collection=[]
#先将负数的取出来
for i in range(min_value//(default_bucket_size+1)-1,0,1):
if bucket[i]:
collection.extend(bucket[i]) for i in range(0,max_value//(default_bucket_size+1)+1):
if bucket[i]:
collection.extend(bucket[i])
return collection

效率分析:

对比(随机数据 1000 pic):(比所有的都快)

  比  快排  快 ,是快排时间的一半

(sort) λ python some_sort.py
详细数据:[-0.0009996891, -2.3842e-07, -0.00099945068, 2.38419e-06, -0.00100016594, -0.00099945068, -0.00100064278, 9.5367e-07, -0.00199985504, -1.66893e-06, -0.00199890137, -0.00098228455, -0.00099
873543, -0.00098752975, -0.0009996891, -0.00098180771, -0.00099182129, -0.00199866295, -4.7684e-07, -0.00099992752, -0.00099992752, -4.7684e-07, -0.00199866295, -0.00099110603, 1.43051e-06, -0.00101184845, 2.3842e-07, -0.0010008812, -0.00099945068, -0.00099825859, -0.00099253654, -0.00098466873, -4.7684e-07, -0.00098800659, -0.00101137161, -0.00098705292, -0.00198578835, -0.00099992752, -2.3842e-07, -0.00199365616, -0.00099873543, -0.00097751617, -0.00100040436, -0.00099992752, 1.311302e-05, -0.00099945068, -1.192093e-05, -0.00199866295, 0.0, -0.00100040436, -0.00099945068, -0.0009996891, -0.00099945068, 2.3842e-07, -0.00099992752, -0.00199890137, -7.1526e-07, -0.00099921227, -0.00100016594, -0.00099945068, -4.7684e-07, -0.00099992752, -7.1526e-07, -0.00099849701, -0.00100016594, -0.00099992752, -0.00099802017, -0.00099825859, -4.7684e-07, -0.00100040436, 4.7684e-07, -0.0019993782, -0.00199794769, -0.00099945068, -0.00099897385, -0.00100016594, -0.00099873543, -0.00100278854, -3.57628e-06, -0.0010008812, -2.3842e-07, -0.00199866295, -0.00099730492, -2.3842e-07, -0.00099873543, -2.3842e-07, -0.00099921227, -0.00099992752, -0.00199913979, -0.00099921227, -0.00199890137, -9.5367e-07, -2.3842e-07, -0.00099897385, 2.3842e-07, -0.00099992752, -0.00099802017, -0.0009996891, -9.5367e-07, -0.00099825859]
运行了100次,平均运行时间差(bucket_sort3-quick_sort2)(正数代表你是个弟弟)是:-0.00085837841
前者(bucket_sort3)平均运行时间0.00077979803,后者(quick_sort2)平均运行时间0.00163817644,前者约是后者的0.4760倍

  比   归并   快,是归并时间的五分之一

详细数据:[-0.00199866295, -0.00299787521, -0.00299811363, -0.00299906731, -0.00399804115, -0.00299978256, -0.00300049782, -0.00299811363, -0.0039973259, -0.00299811363, -0.00299811363, -0.002997159
96, -0.0029964447, -0.00299835205, -0.00199961662, -0.00299906731, -0.00399780273, -0.0029976368, -0.00399804115, -0.00299453735, -0.00299739838, -0.00299906731, -0.00299954414, -0.00199842453, -0.00299787521, -0.00199866295, -0.00299859047, -0.00399804115, -0.00199890137, -0.00299787521, -0.00399780273, -0.00199913979, -0.00299882889, -0.00299859047, -0.00199866295, -0.00299930573, -0.00399518013, -0.00299906731, -0.00399827957, -0.00199913979, -0.00299811363, -0.00199890137, -0.00199770927, -0.00299882889, -0.00300741196, -0.00399780273, -0.00299715996, -0.00199818611, -0.00299978256, -0.00299692154, -0.00399804115, -0.00199890137, -0.00299859047, -0.00400114059, -0.00200080872, -0.00299596786, -0.00299835205, -0.00299835205, -0.00399708748, -0.00391745567, -0.00299978256, -0.00199913979, -0.00299906731, -0.00199747086, -0.0030040741, -0.00198936462, -0.00199794769, -0.00299859047, -0.00299715996, -0.0019993782, -0.00299835205, -0.00299811363, -0.00399851799, -0.0019993782, -0.00299882889, -0.00299835205, -0.00199532509, -0.0039973259, -0.00199842453, -0.00299859047, -0.00299191475, -0.00199842453, -0.00299692154, -0.00299906731, -0.00299835205, -0.00299906731, -0.00299930573, -0.00299835205, -0.00299859047, -0.00199890137, -0.00299811363, -0.00299906731, -0.00299811363, -0.00299859047, -0.00299835205, -0.00299906731, -0.00299835205, -0.00299787521, -0.00199747086, -0.0039973259]
运行了100次,平均运行时间差(bucket_sort3-merge_sort5)(正数代表你是个弟弟)是:-0.00291750669
前者(bucket_sort3)平均运行时间0.00083964109,后者(merge_sort5)平均运行时间0.00375714779,前者约是后者的0.2235倍

  比  希尔排序  快 是其时间的五分之一(希尔和归并差不多)

详细数据:[-0.00314354897, -0.00299811363, -0.00199770927, -0.00299692154, -0.00199794769, -0.00299739838, -0.00199890137, -0.00199961662, -0.00299787521, -0.00199866295, -0.00199961662, -0.00199794
769, -0.00199866295, -0.00299715996, -0.00199818611, -0.00299882889, -0.00199818611, -0.00199818611, -0.0029976368, -0.00299715996, -0.00199842453, -0.00199842453, -0.00299882889, -0.00299906731, -0.00199985504, -0.00299906731, -0.00199866295, -0.00299954414, -0.00299668312, -0.00199890137, -0.00199985504, -0.00199770927, -0.00299906731, -0.00299835205, -0.00199961662, -0.00199794769, -0.00200033188, -0.00300073624, -0.00199794769, -0.00299859047, -0.00199913979, -0.00199818611, -0.00199866295, -0.00199818611, -0.00199723244, -0.00199985504, -0.0029976368, -0.00199913979, -0.00399756432, -0.00399780273, -0.0019993782, -0.00399780273, -0.00199747086, -0.00299835205, -0.00299739838, -0.00218892097, -0.00299906731, -0.00299978256, -0.00200152397, -0.00299787521, -0.00299906731, -0.00299787521, -0.00300002098, -0.00299930573, -0.00199985504, -0.00399637222, -0.00299811363, -0.00299739838, -0.00199651718, -0.00199842453, -0.00299882889, -0.00199842453, -0.00299787521, -0.00199913979, -0.00299906731, -0.00299954414, -0.0020005703, -0.0019993782, -0.00199747086, -0.00300002098, -0.00199890137, -0.00299954414, -0.0019993782, -0.00199818611, -0.00299954414, -0.0029976368, -0.00399780273, -0.0019993782, -0.00199890137, -0.00299715996, -0.00199842453, -0.00300073624, -0.0020468235, -0.00200080872, -0.00199890137, -0.00299692154, -0.00299811363, -0.00199818611, -0.00301623344, -0.00299811363]
运行了100次,平均运行时间差(bucket_sort3-shell_sort3)(正数代表你是个弟弟)是:-0.00254259825
前者(bucket_sort3)平均运行时间0.00081892967,后者(shell_sort3)平均运行时间0.00336152792,前者约是后者的0.2436倍

  比  选择排序  快,是选择的五十分之一:

详细数据:[-0.03398036957, -0.03499770164, -0.03396248817, -0.03496146202, -0.03397917747, -0.03397989273, -0.03298139572, -0.03398084641, -0.03497886658, -0.03498005867, -0.03398036957, -0.03398060
799, -0.034979105, -0.03498101234, -0.03398418427, -0.03597950935, -0.03597903252, -0.03399825096, -0.03498101234, -0.03398108482, -0.03497958183, -0.03597950935, -0.03597855568, -0.03497576714, -0.03797698021, -0.03399848938, -0.03398132324, -0.03497838974, -0.03496193886, -0.0359787941, -0.03399085999, -0.03597998619, -0.03597402573, -0.03398489952, -0.03596282005, -0.03499102592, -0.03397941589, -0.03601336479, -0.03697705269, -0.0339846611, -0.03496146202, -0.03599238396, -0.03398108482, -0.03397989273, -0.03498125076, -0.03498005867, -0.03595948219, -0.03597831726, -0.03497958183, -0.03596568108, -0.03397488594, -0.03499507904, -0.034979105, -0.03497958183, -0.03397917747, -0.03598380089, -0.032984972, -0.0369784832, -0.03498005867, -0.03397941589, -0.03499794006, -0.03499674797, -0.03398036957, -0.03499245644, -0.03497028351, -0.03597903252, -0.03399300575, -0.03496837616, -0.03397703171, -0.03697776794, -0.03495669365, -0.03498387337, -0.03496170044, -0.03399395943, -0.0359787941, -0.03398942947, -0.03396558762, -0.03397417068, -0.03597927094, -0.03599858284, -0.03598117828, -0.03697872162, -0.03397989273, -0.03496670723, -0.034979105, -0.0349984169, -0.03398323059, -0.03499269485, -0.03697919846, -0.0359787941, -0.03398108482, -0.03600120544, -0.0340192318, -0.03694748878, -0.03397417068, -0.0349843502, -0.03497982025, -0.0349509716, -0.03397989273, -0.03499174118]
运行了100次,平均运行时间差(bucket_sort3-select_sort2)(正数代表你是个弟弟)是:-0.03496050596
前者(bucket_sort3)平均运行时间0.00084935665,后者(select_sort2)平均运行时间0.03580986261,前者约是后者的0.0237倍

  比  插入排序  快,是插入的四十分之一(插入比选择稍快)

详细数据:[-0.03098082542, -0.03298091888, -0.03298020363, -0.03298211098, -0.03098201752, -0.0329811573, -0.0319814682, -0.03397226334, -0.03299307823, -0.03299331665, -0.03297615051, -0.0329673290
3, -0.03298044205, -0.03196763992, -0.03596043587, -0.0329720974, -0.03394341469, -0.03298044205, -0.03198313713, -0.0319814682, -0.03398036957, -0.03198099136, -0.03198075294, -0.03298068047, -0.03198075294, -0.03299951553, -0.03296327591, -0.03399300575, -0.03196907043, -0.03398036957, -0.03199481964, -0.03396821022, -0.03299880028, -0.03096842766, -0.03299975395, -0.03299093246, -0.03296685219, -0.03396272659, -0.03196787834, -0.03198266029, -0.03199386597, -0.0339679718, -0.03299355507, -0.03095984459, -0.03198885918, -0.03299260139, -0.03298068047, -0.03298020363, -0.03298091888, -0.03398156166, -0.03299427032, -0.03298664093, -0.03297948837, -0.03396320343, -0.03299760818, -0.03298211098, -0.03398489952, -0.03299307823, -0.03198766708, -0.03497314453, -0.03198480606, -0.0339615345, -0.03299856186, -0.03297662735, -0.03197908401, -0.03298091888, -0.03300595284, -0.03196787834, -0.03398895264, -0.03399324417, -0.03298187256, -0.03297996521, -0.03198194504, -0.03296780586, -0.03398084641, -0.03201436996, -0.03397965431, -0.032943964, -0.03397917747, -0.03299331665, -0.03299474716, -0.032995224, -0.03299283981, -0.03197216988, -0.03297519684, -0.03396677971, -0.0319814682, -0.03298163414, -0.03299808502, -0.03198266029, -0.03298020363, -0.03399372101, -0.03299880028, -0.03299379349, -0.0319788456, -0.03199863434, -0.03199315071, -0.03196239471, -0.03398275375, -0.0319890976]
运行了100次,平均运行时间差(bucket_sort3-insertion_sort4)(正数代表你是个弟弟)是:-0.03288164616
前者(bucket_sort3)平均运行时间0.00086993694,后者(insertion_sort4)平均运行时间0.03375158310,前者约是后者的0.0258倍

  比  双向冒泡  快 大约是双向冒泡的80分之一

详细数据:[-0.0679602623, -0.06896090508, -0.06995844841, -0.06696105003, -0.0679602623, -0.06796169281, -0.06796336174, -0.06995844841, -0.06696224213, -0.06696152687, -0.06796073914, -0.0679614543
9, -0.06796169281, -0.07395768166, -0.06896066666, -0.06696295738, -0.06796097755, -0.06796169281, -0.06795978546, -0.06896162033, -0.06995987892, -0.06796050072, -0.07095956802, -0.06795907021, -0.07094860077, -0.07029008865, -0.06695008278, -0.07095980644, -0.06796097755, -0.06897354126, -0.06889176369, -0.06996965408, -0.06695723534, -0.06696105003, -0.07495641708, -0.06796073914, -0.06696105003, -0.07096242905, -0.07095766068, -0.06896018982, -0.06898617744, -0.06895923615, -0.06896018982, -0.06896018982, -0.06796193123, -0.06896018982, -0.06995820999, -0.06596207619, -0.0689599514, -0.08095502853, -0.08395123482, -0.09195208549, -0.07795715332, -0.08994960785, -0.08594679832, -0.06696033478, -0.06697392464, -0.06797289848, -0.06895089149, -0.06897783279, -0.07194113731, -0.06896066666, -0.06894683838, -0.06896018982, -0.06895947456, -0.06796073914, -0.06996059418, -0.06895923615, -0.06896042824, -0.06697916985, -0.06796050072, -0.0669605732, -0.06896018982, -0.0689599514, -0.06796813011, -0.06896162033, -0.06796073914, -0.06796002388, -0.07095599174, -0.06897830963, -0.07094669342, -0.0699596405, -0.06796836853, -0.06796002388, -0.07095861435, -0.07095980644, -0.06895971298, -0.06996059418, -0.06946516037, -0.06697487831, -0.06995916367, -0.06896042824, -0.06995868683, -0.06900596619, -0.06895875931, -0.06796050072, -0.06995892525, -0.06796216965, -0.0669760704, -0.06894826889]
运行了100次,平均运行时间差(bucket_sort3-bidirectional_bubble_sort3)(正数代表你是个弟弟)是:-0.06981870651
前者(bucket_sort3)平均运行时间0.00084897995,后者(bidirectional_bubble_sort3)平均运行时间0.07066768646,前者约是后者的0.0120倍

  比  单向冒泡  快,是其时间的100分之一

 

 

 

python 排序 桶排序的更多相关文章

  1. 记数排序 & 桶排序 & 基数排序

    为什么要写这样滴一篇博客捏...因为一个新初一问了一道水题,结果就莫名其妙引起了战斗. 然后突然发现之前理解的桶排序并不是真正的桶排序,所以写一篇来区别下这三个十分相似的排序辣. 老年菜兔的觉醒!!! ...

  2. python实现桶排序算法

    桶排序算法也是一种可以以线性期望时间运行的算法,该算法的原理是将数组分到有限数量的桶里,每个桶再分别排序. 它的算法流程如下所示: 设置一个定量的数组当作空桶子. 寻访序列,并且把项目一个一个放到对应 ...

  3. python与桶排序

    问题提出: 将以下数据: 6, 8, 2, 3, 4, 0, 9, 1, 5,1 按从小到达排列. 桶排序原理: 桶排序也叫计数排序,简单来说,就是将数据集里面所有元素按顺序列举出来,然后统计元素出现 ...

  4. Python线性时间排序——桶排序、基数排序与计数排序

    1. 桶排序 1.1 范围为1-M的桶排序 如果有一个数组A,包含N个整数,值从1到M,我们可以得到一种非常快速的排序,桶排序(bucket sort).留置一个数组S,里面含有M个桶,初始化为0.然 ...

  5. 计数排序与桶排序python实现

    计数排序与桶排序python实现 计数排序 计数排序原理: 找到给定序列的最小值与最大值 创建一个长度为最大值-最小值+1的数组,初始化都为0 然后遍历原序列,并为数组中索引为当前值-最小值的值+1 ...

  6. 计数排序、桶排序python实现

    计数排序在输入n个0到k之间的整数时,时间复杂度最好情况下为O(n+k),最坏情况下为O(n+k),平均情况为O(n+k),空间复杂度为O(n+k),计数排序是稳定的排序. 桶排序在输入N个数据有M个 ...

  7. 【Python】常用排序算法的python实现和性能分析

    作者:waterxi 原文链接 背景 一年一度的换工作高峰又到了,HR大概每天都塞几份简历过来,基本上一天安排两个面试的话,当天就只能加班干活了.趁着面试别人的机会,自己也把一些基础算法和一些面试题整 ...

  8. Python中经典排序方法

    数据的排序是在解决实际问题时经常用到的步骤,也是数据结构的考点之一,下面介绍10种经典的排序方法. 首先,排序方法可以大体分为插入排序.选择排序.交换排序.归并排序和桶排序四大类,其中,插入排序又分为 ...

  9. 计数排序和桶排序(Java实现)

    目录 比较和非比较的区别 计数排序 计数排序适用数据范围 过程分析 桶排序 网络流传桶排序算法勘误 桶排序适用数据范围 过程分析 比较和非比较的区别 常见的快速排序.归并排序.堆排序.冒泡排序等属于比 ...

随机推荐

  1. Django框架(十六)-- 中间件、CSRF跨站请求伪造

    一.什么是中间件 中间件是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出 二.中间件的作用 如果你想修改请求,例如被传送到view ...

  2. xenserver 添加和卸载硬盘

                最近在浪潮服务器上安了xenserver系统,创建虚拟机,没注意磁盘超负载就重启了服务导致各种坑,一言难尽,忧伤逆流成河啊,所以准备将各种操作整理总结记录下,持续更新ing~~ ...

  3. shell-基础2

    条件表达式 文件判断 文件测试操作符 常用文件测试操作符 说明 -d文件,d的全拼为directory 文件存在且为目录则为真,即测试表达式成立 -f文件,f的全拼为file 文件存在且为普通文件则为 ...

  4. thread_asyncio

    thread_asyncio # 使用多线程:在携程中集成阻塞io import asyncio from concurrent.futures import ThreadPoolExecutor i ...

  5. 莫烦TensorFlow_01 基本程序结构

    import tensorflow as tf import numpy as np # create data x_data = np.random.rand(100).astype(np.floa ...

  6. python27期day14:有参装饰器、多个装饰器装饰一个函数、递归、作业题

    1.有参装饰器:给装饰器添加一个参数.来控制装饰器的行为. @auth(参数) auth里层的函数名 = auth(参数) 被装饰的函数名 = auth里层的函数名(被装饰的函数名) 被装饰的函数名( ...

  7. 史上最全NOIP初赛知识点

    CSP-J/S 第一轮知识点选讲 \(NOIP\)(全国青少年信息学奥林匹克竞赛)于2019年取消.取而代之的是由\(CCF\)推出的非专业级软件能力认证,也就是现在的\(CSP-J/S\).作为一名 ...

  8. yum源加速,替换为阿里云镜像

    问题 使用yum命令安装mysql时,发现下载速度很慢,于是决定换成阿里的yum源 解决方法 参考自:https://www.jianshu.com/p/b7cd2f9fb8b7 首先备份一下原先的y ...

  9. wal2json docker 试用

    基于官方的release 构建了一个docker 镜像,以下是测试使用 环境准备 docker-compose 文件 version: "3" services:   mypg: ...

  10. input type属性为number时,去掉右边的上下箭头

    加上样式: input::-webkit-outer-spin-button, input::-webkit-inner-spin-button { -webkit-appearance: none; ...