zoukankan      html  css  js  c++  java
  • 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分之一

     

     

     

  • 相关阅读:
    linux部署tomcat服务器
    如何设计功能测试
    sql语句字符串型日期转化为数字类型
    关于软件测试的基础知识
    关于数据库的一些基本知识
    py,先导,--L
    selenium,常用网站
    maven,使用
    移动自动化,appium,java--L
    接口,自动化,java--L
  • 原文地址:https://www.cnblogs.com/Gaoqiking/p/11187766.html
Copyright © 2011-2022 走看看