python 排序 桶排序
算法思想:
桶排序将数组分到有限数量的桶里。然后每个桶里再分别排序(使用任何算法)
当要倍排序的数组内的数值时均匀分配的时候,桶排序使用线性时间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 排序 桶排序的更多相关文章
- 记数排序 & 桶排序 & 基数排序
为什么要写这样滴一篇博客捏...因为一个新初一问了一道水题,结果就莫名其妙引起了战斗. 然后突然发现之前理解的桶排序并不是真正的桶排序,所以写一篇来区别下这三个十分相似的排序辣. 老年菜兔的觉醒!!! ...
- python实现桶排序算法
桶排序算法也是一种可以以线性期望时间运行的算法,该算法的原理是将数组分到有限数量的桶里,每个桶再分别排序. 它的算法流程如下所示: 设置一个定量的数组当作空桶子. 寻访序列,并且把项目一个一个放到对应 ...
- python与桶排序
问题提出: 将以下数据: 6, 8, 2, 3, 4, 0, 9, 1, 5,1 按从小到达排列. 桶排序原理: 桶排序也叫计数排序,简单来说,就是将数据集里面所有元素按顺序列举出来,然后统计元素出现 ...
- Python线性时间排序——桶排序、基数排序与计数排序
1. 桶排序 1.1 范围为1-M的桶排序 如果有一个数组A,包含N个整数,值从1到M,我们可以得到一种非常快速的排序,桶排序(bucket sort).留置一个数组S,里面含有M个桶,初始化为0.然 ...
- 计数排序与桶排序python实现
计数排序与桶排序python实现 计数排序 计数排序原理: 找到给定序列的最小值与最大值 创建一个长度为最大值-最小值+1的数组,初始化都为0 然后遍历原序列,并为数组中索引为当前值-最小值的值+1 ...
- 计数排序、桶排序python实现
计数排序在输入n个0到k之间的整数时,时间复杂度最好情况下为O(n+k),最坏情况下为O(n+k),平均情况为O(n+k),空间复杂度为O(n+k),计数排序是稳定的排序. 桶排序在输入N个数据有M个 ...
- 【Python】常用排序算法的python实现和性能分析
作者:waterxi 原文链接 背景 一年一度的换工作高峰又到了,HR大概每天都塞几份简历过来,基本上一天安排两个面试的话,当天就只能加班干活了.趁着面试别人的机会,自己也把一些基础算法和一些面试题整 ...
- Python中经典排序方法
数据的排序是在解决实际问题时经常用到的步骤,也是数据结构的考点之一,下面介绍10种经典的排序方法. 首先,排序方法可以大体分为插入排序.选择排序.交换排序.归并排序和桶排序四大类,其中,插入排序又分为 ...
- 计数排序和桶排序(Java实现)
目录 比较和非比较的区别 计数排序 计数排序适用数据范围 过程分析 桶排序 网络流传桶排序算法勘误 桶排序适用数据范围 过程分析 比较和非比较的区别 常见的快速排序.归并排序.堆排序.冒泡排序等属于比 ...
随机推荐
- Centos7服务器搭建网络家园和论坛
环境:Centos7 工具:mysql,php,httpd 目的:熟练掌握httpd服务器搭建和个服务器之间的配合. 有兴趣的朋友可以来实践一下,我会提供各种源码进行搭建. 网络家园和论坛源码:htt ...
- 五、select的5种子句
1.Where 条件查询 比较运算符: 运算符 说明 > < = >= <= !=或<> In 在某集合内 between 在某范围内 In ...
- conan使用(五)--打包chromium-base
现在我们就利用之前学习到的conan的使用方法,将chromium中的base库打包成一个conan包. 1. 准备源码 chromium本身是通过gn来编译的,这个目前conan并不支持.所以需要把 ...
- DNS解析过程--笔试答题版
在运维笔试的时候,回答DNS解析的过程,不能写一大堆,一是不美观,二是浪费时间,应该怎么写呢?我觉得这样写比较好. 1.客户端:chche----hosts 2.DNS服务器:cache---递归-- ...
- 03-cmake语法-变量,字符串
CMake的基本数据类型是字符串(不区分大小写),一组字符串在一起称为列表(list). 条件判断中的取值情况如下表: 真 1, ON, YES, TRUE, Y, 非0的数 假 0, OFF, N ...
- zz深度学习目标检测2014至201901综述
论文学习-深度学习目标检测2014至201901综述-Deep Learning for Generic Object Detection A Survey 发表于 2019-02-14 | 更新 ...
- GIT : IDEA切换到某个tag
背景看一本presto的书,发现版本用的是presto-0.107这个版本.然后我去Apache clone下源码,发现分支只有几个,但是下载页面却有很多不同的版本 然后看Tag发现有很多. 然后我现 ...
- Apex 中 DML 进阶知识小结
DML 选项 在 DML 语句执行的时候可以设置选项.这些选项用 DML.Options 类来表示. 完整的介绍在官方文档中. 在建立一个 DML.Options 实例之后,可以使用 setOptio ...
- ansys meshing划分无厚度的面
优酷播放地址: https://v.youku.com/v_show/id_XNDQ3MjAyODYzMg==.html?spm=a2hzp.8244740.0.0 原版视频教程下载地址: https ...
- C# HTTP系列4 HttpWebRequest.CookieContainer属性
系列目录 [已更新最新开发文章,点击查看详细] HttpWebRequest.CookieContainer 获取或设置与此请求关联的 Cookie.默认情况下CookieContainer ...