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实现)
目录 比较和非比较的区别 计数排序 计数排序适用数据范围 过程分析 桶排序 网络流传桶排序算法勘误 桶排序适用数据范围 过程分析 比较和非比较的区别 常见的快速排序.归并排序.堆排序.冒泡排序等属于比 ...
随机推荐
- Nginx类
nginx常见错误页面有哪些?对于其解决方法是什么? 404 bad request 请求失败,请求所希望得到的资源未被在服务器上发现.没有信息能够告诉用户这个状况到底是暂时的还是永久的.假如服务器知 ...
- 【洛谷P4542】 [ZJOI2011]营救皮卡丘(费用流)
洛谷 题意: 给出\(n\)个点,\(m\)条边,现在有\(k,k\leq 10\)个人从\(0\)号点出发前往\(n\)点. 规定若某个人想要到达\(x\)点,则\(1\)~\(x-1\)号点都有人 ...
- 201871010123-吴丽丽《面向对象程序设计(Java)》第十五周学习总结
201871010123-吴丽丽<面向对象程序设计(Java)>第十五周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...
- tensorflow 待阅读的资料
tensorflow性能调优实践 https://www.jianshu.com/p/937a0ce99f56 2018.04.01 Deep Learning 之 最优化方法 https://blo ...
- Zookeeper注册中心搭建-单机版(三)
Zookeeper是一个分布式协调组件,本质是一个软件. Zookeeper常用的功能有: 发布订阅功能,把 zookeeper 当作注册中心的原因. 分布式/集群管理功能 Zookeeper是Jav ...
- TCP四次握手断开连接(十一)
建立连接非常重要,它是数据正确传输的前提:断开连接同样重要,它让计算机释放不再使用的资源.如果连接不能正常断开,不仅会造成数据传输错误,还会导致套接字不能关闭,持续占用资源,如果并发量高,服务器压力堪 ...
- scp、rsync、xsync
scp. 拷贝完全相同 scp -r etc/hadoop/dfs.hosts root@192.168.121.134:/usr/local/hadoop/hadoop-2.7.6/etc/hado ...
- 【java】[null]的问题
这么写逻辑就有问题,改成下面的
- Java递归实现阶乘
import java.util.Scanner; public class Factorial { public static void main(String[] args) { Scanner ...
- sed和awk练习及知识点
一.针对/etc/passwd操作 1.sed操作,将文件中的第九行至第十五行复制到第16行下. [root@ns1 lianxi]# sed '9,15H;16G' /etc/passwd 2.用a ...