算法思想:

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

  当要倍排序的数组内的数值时均匀分配的时候,桶排序使用线性时间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. python之滑动认证(图片)

    from PIL import Image, ImageEnhance from io import BytesIO def cutImg(imgsrc): """ 根据 ...

  2. JMETER 计数器的表现

    1.计数器在线程中表现(虚拟用户). 线程组使用4个线程即4个虚拟用户. 如果不勾选每用户独立跟踪计数器. 那么这个计数器将会累加4次. 计算结果为7. 勾选的情况. 这里我们可以看到 index 一 ...

  3. 其他综合-CentOS 7 使用二进制包搭建lnmp平台

    CentOS 7 使用二进制包搭建lnmp平台 1.实验描述 通过二进制搭建 lnmp 平台,实现 web 环境基本部署 2.实验环境 虚拟机: 系统:CenOS 7.6 内存:2 G+ 数量:1台 ...

  4. C#基础表达式语句详解(上)

    本节内容: 1.表达式的定义: 2.各类表达式概览: 3.语句的定义: 4.语句详解: 1.表达式的定义: 1.1什么是表达式: (定义见下图)各类编程语言对表达式的实现不尽相同,但大体上都符合这个定 ...

  5. SpringBoot使用@Value来获取properties的值

    今天在项目中想使用@Value来获取Springboot中properties中属性值.场景:定义了一个工具类,想要获取一些配置参数,使用了@value来获取,但是死活也获取不到.如何解决:在使用这个 ...

  6. 项目:git+gitlab+jenkins+ansible上线网站

    项目需求 1. 在gitlab中创建一个项目 nginxinstall2. 编写playbook,实现一键部署nginx.部署一个静态测试页.测试部署结果要求: 部署nginx 端口:83 运行身份: ...

  7. [LeetCode] 374. Guess Number Higher or Lower 猜数字大小

    We are playing the Guess Game. The game is as follows: I pick a number from 1 to n. You have to gues ...

  8. Spring Boot中的Mongodb多数据源扩展

    在日常工作中,我们通过Spring Data Mongodb来操作Mongodb数据库,在Spring Boot中只需要引入spring-boot-starter-data-mongodb即可. 然后 ...

  9. ZROI1153 【线上训练3】数个数

    ZROI1153 [线上训练3]数个数 传送门 一道非常有意思的题,涵盖了各种知识点. 首先,很显然,这是个容斥.容斥可以过掉\(30pts\). 这里我们考虑容斥+DP. 我们令\(dp[i][j] ...

  10. Elasticsearch由浅入深(九)搜索引擎:query DSL、filter与query、query搜索实战

    search api的基本语法 语法概要: GET /_search {} GET /index1,index2/type1,type2/_search {} GET /_search { , } h ...