冒泡排序:

 冒泡排序就是每次找出最大(最小)元素,放在集合最前或最后,这是最简单的排序算法

def bubble_sort(collection):
#升序排列
length=len(collection)
for s in range(length-1):#可以假设只有一个元素的情况,这样可以直接返回
flage=True#应该放在这里,而不是上面
for i in range(length-1-s):
if collection[i]>collection[i+1]:#前者大需要换位置,并需要判断他是否是最大的
flage=False
collection[i],collection[i+1]=collection[i+1],collection[i]
# print("排序第",s+1,"轮之后:",collection)#print()好占时间啊
# i++#i是自动递增的,我竟然写出如此愚蠢的
if flage:
break
return collection

  特点:是稳定的 T(n)=O(n^2) 原地排序

  内层循环的操作是O(1)的,共执行n-1轮循环,每轮分别执行(n-1,n-2....1)=(n-1)(n-1+1)/2

双向冒泡排序:

  双向冒泡排序又称为:鸡尾酒排序

  双向冒泡作为冒泡排序的轻微改进,主要的不同就在于遍历元素时不只有从前到后,而是在遍历到序列的队尾时,按照从后向前在遍历到队头。

  以序列(2,3,4,5,1)为例,鸡尾酒排序只需要访问一次序列就可以完成排序,但如果使用冒泡排序则需要四次。但是在随机数序列的状态下,鸡尾酒排序与冒泡排序的效率都很差劲。

def bidirectional_bubble_sort3(collection):
length=len(collection)
disorder_start_index=0
disorder_end_index=length-1 while disorder_start_index<disorder_end_index:
#正序
flage=False
#先让初始的两个有序
if collection[disorder_start_index]>collection[disorder_start_index+1]:
collection[disorder_start_index],collection[disorder_start_index+1]=collection[disorder_start_index+1],collection[disorder_start_index] for i in range(disorder_start_index+1,disorder_end_index):
#一次找两个最大的元素,为什么是两个,因为不用第二次比较,假如比这两个中的第一个大就让第一个向后挪,如果比第一个小,就和第二个比较
if collection[i]>collection[i+1]:
collection[i],collection[i+1]=collection[i+1],collection[i]
flage=True
if collection[i]<collection[i-1]:
collection[i],collection[i-1]=collection[i-1],collection[i] disorder_end_index-=2
if collection[disorder_end_index]<collection[disorder_end_index-1]:
collection[disorder_end_index],collection[disorder_end_index-1]=collection[disorder_end_index-1],collection[disorder_end_index] for j in range(disorder_end_index-1,disorder_start_index,-1):
if collection[j]<collection[j-1]:
collection[j],collection[j-1]=collection[j-1],collection[j]
flage=True
if collection[j]>collection[j+1]:
collection[j],collection[j+1]=collection[j+1],collection[j]
disorder_start_index+=2
if not flage:
break
return collection

  算法分析:最坏时间复杂度O(n^2)  、平均时间复杂度O(n^2)、最优时间复杂度O(n)

但如果序列在一开始已经大部分排序过的话,会接近

对比

  与冒泡相比,比冒泡快20%,时间是冒泡的80%

详细数据:[-0.01099324226, -0.01499199867, -0.01399159431, -0.01399326324, -0.01499223709, -0.01399183273, -0.01599097252, -0.01499199867, -0.0160036087, -0.01500368118, -0.01399087906, -0.014993667
6, -0.01599144936, -0.014991045, -0.01399230957, -0.01599121094, -0.01401019096, -0.01300311089, -0.01602697372, -0.01500558853, -0.01799058914, -0.01498985291, -0.01596426964, -0.01299071312, -0.01600933075, -0.01598501205, -0.01598405838, -0.01801800728, -0.0170276165, -0.01397919655, -0.01600432396, -0.13593554497, -0.01498842239, -0.01499223709, -0.01497864723, -0.01601624489, -0.01398897171, -0.01598596573, -0.01599144936, -0.01600551605, 0.05896472931, -0.01797199249, -0.01601552963, -0.01200699806, -0.01499462128, -0.0159740448, -0.01597189903, -0.01500415802, -0.01497507095, -0.01597762108, -0.0139913559, -0.01595687866, -0.00696969032, -0.01799035072, -0.01097488403, -0.01895284653, -0.01496243477, -0.01797008514, -0.0159766674, -0.02300024033, -0.0159907341, -0.02098846436, -0.01899337769, -0.008010149, -0.02000403404, -0.01698970795, -0.01698923111, -0.02098751068, -0.01400947571, -0.03299713135, -0.22087359428, -0.0069963932, -0.15491271019, -0.00699687004, -0.01550579071, -0.014991045, -0.01399278641, -0.0089943409, -0.01499080658, -0.04297423363, -0.01499080658, -0.01399040222, -0.01799154282, -0.01499199867, -0.01998782158, -0.01599144936, -0.01299262047, -0.01598978043, -0.01399302483, -0.01399111748, -0.01199412346, -0.01499032974, -0.0169904232, -0.01698660851, -0.01517891884, -0.0129904747, -0.01498866081, -0.01398968697, -0.01742386818, -0.01702928543]
运行了100次,平均运行时间差(bidirectional_bubble_sort3-bubble_sort)(正数代表你是个弟弟)是:-0.01958100796
前者(bidirectional_bubble_sort3)平均运行时间0.06751573801,后者(bubble_sort)平均运行时间0.08709674597,前者约是后者的0.7752倍

   与快排相比:是快排的40倍

详细数据:[0.0679602623, 0.06796073914, 0.06896018982, 0.06798624992, 0.06896018982, 0.06895971298, 0.06896018982, 0.068972826, 0.06895947456, 0.06896018982, 0.06698727608, 0.06896114349, 0.06997680
664, 0.06896066666, 0.06794142723, 0.06797409058, 0.06996369362, 0.06894779205, 0.0699737072, 0.06796240807, 0.0689599514, 0.06696033478, 0.06995916367, 0.067943573, 0.06797242165, 0.06894803047, 0.06996655464, 0.06995368004, 0.06894516945, 0.06995940208, 0.06997895241, 0.06897211075, 0.0689599514, 0.06996059418, 0.06997251511, 0.06896066666, 0.06797456741, 0.06994271278, 0.0689458847, 0.06895947456, 0.06995916367, 0.07095837593, 0.06696271896, 0.07195830345, 0.06699585915, 0.07095932961, 0.06895923615, 0.06896018982, 0.06796050072, 0.06794905663, 0.06894779205, 0.06796050072, 0.06897377968, 0.07295536995, 0.0699596405, 0.06796121597, 0.06897592545, 0.06894993782, 0.0709373951, 0.0689599514, 0.06894612312, 0.07094478607, 0.06897330284, 0.06898331642, 0.06896018982, 0.06796145439, 0.06896018982, 0.0699596405, 0.07095837593, 0.06897234917, 0.06796836853, 0.06696081161, 0.06894207001, 0.06794261932, 0.06796050072, 0.0699596405, 0.06895637512, 0.06997203827, 0.06797218323, 0.0689599514, 0.06994652748, 0.06996011734, 0.06895565987, 0.06996059418, 0.0679602623, 0.06997108459, 0.07096338272, 0.06796073914, 0.06995820999, 0.06895947456, 0.06698918343, 0.06798553467, 0.0679731369, 0.06894683838, 0.06894683838, 0.06796240807, 0.06994342804, 0.06796813011, 0.06895875931, 0.0689599514]
运行了100次,平均运行时间差(bidirectional_bubble_sort3-quick_sort2)(正数代表你是个弟弟)是:0.06901133537
前者(bidirectional_bubble_sort3)平均运行时间0.07079039812,后者(quick_sort2)平均运行时间0.00177906275,前者约是后者的39.7908倍

  与归并相比:是归并的将近20倍

详细数据:[0.06596302986, 0.06396269798, 0.06496167183, 0.06296300888, 0.06696891785, 0.06696009636, 0.06396341324, 0.06496405602, 0.06996130943, 0.0649638176, 0.06496357918, 0.06296420097, 0.065960
88409, 0.06196498871, 0.06296205521, 0.06596231461, 0.06596207619, 0.06496143341, 0.06396269798, 0.06396341324, 0.06496334076, 0.06496286392, 0.06296300888, 0.06396245956, 0.06396341324, 0.06396436691, 0.06796193123, 0.065959692, 0.06496143341, 0.06296300888, 0.06396269798, 0.06596088409, 0.06596183777, 0.06396245956, 0.06296300888, 0.06496238708, 0.06296253204, 0.0619635582, 0.06498837471, 0.06597709656, 0.06596016884, 0.06496167183, 0.06596231461, 0.06596708298, 0.06594824791, 0.06596112251, 0.06496214867, 0.06596660614, 0.06595754623, 0.06694293022, 0.06396174431, 0.06696128845, 0.06496310234, 0.06694960594, 0.0669362545, 0.06598424911, 0.06396317482, 0.06596112251, 0.06698656082, 0.06597089767, 0.06496024132, 0.06597447395, 0.06598377228, 0.06596159935, 0.06494235992, 0.06496167183, 0.06596207619, 0.06496191025, 0.0649638176, 0.06696105003, 0.06596183777, 0.06496334076, 0.06496286392, 0.06396198273, 0.0649626255, 0.06296253204, 0.06496238708, 0.06496167183, 0.06596207619, 0.0639629364, 0.06396317482, 0.06496405602, 0.06498575211, 0.0659661293, 0.06595015526, 0.06397628784, 0.06495499611, 0.06293916702, 0.06493544579, 0.06596136093, 0.06498217583, 0.06496167183, 0.06596159935, 0.07195830345, 0.06396317482, 0.06396317482, 0.06596207619, 0.06396174431, 0.06796145439, 0.06496310234]
运行了100次,平均运行时间差(bidirectional_bubble_sort3-merge_sort3)(正数代表你是个弟弟)是:0.06517270088
前者(bidirectional_bubble_sort3)平均运行时间0.06887008905,后者(merge_sort3)平均运行时间0.00369738817,前者约是后者的18.6267倍

  与希尔排序相比:是希尔排序的20倍

(sort) λ python some_sort.py
详细数据:[0.06496214867, 0.06596159935, 0.06496286392, 0.06596207619, 0.06596207619, 0.06596112251, 0.06596136093, 0.06596660614, 0.06595993042, 0.06596326828, 0.06596112251, 0.06495976448, 0.06595
9692, 0.06696224213, 0.06498074532, 0.06692624092, 0.06395316124, 0.06694364548, 0.0659430027, 0.06797099113, 0.06594872475, 0.06396269798, 0.06598711014, 0.06498837471, 0.06596064568, 0.06395316124, 0.06495904922, 0.06698966026, 0.06594347954, 0.06594467163, 0.06598091125, 0.06594276428, 0.06594419479, 0.06496310234, 0.06895804405, 0.06596207619, 0.06496310234, 0.06496286392, 0.06696081161, 0.0669438839, 0.06593418121, 0.06594896317, 0.06699919701, 0.06696796417, 0.06695199013, 0.06596136093, 0.06498599052, 0.06496667862, 0.0659570694, 0.06391382217, 0.06594276428, 0.06597590446, 0.06693482399, 0.06596422195, 0.06694245338, 0.06696128845, 0.06497645378, 0.06500053406, 0.0659506321, 0.06793618202, 0.06594920158, 0.06596231461, 0.06797528267, 0.06598067284, 0.06594944, 0.06494998932, 0.06796479225, 0.06596183777, 0.06696128845, 0.06696081161, 0.0669798851, 0.06598258018, 0.06399250031, 0.06494641304, 0.0649895668, 0.06396317482, 0.06596374512, 0.06497192383, 0.06594514847, 0.06493616104, 0.06497645378, 0.0669503212, 0.06594324112, 0.06494402885, 0.06694865227, 0.06499385834, 0.06397032738, 0.06497907639, 0.06594586372, 0.0649497509, 0.06598567963, 0.06594824791, 0.0649626255, 0.06596302986, 0.06594586372, 0.06493163109, 0.06696295738, 0.06597995758, 0.06499958038, 0.06696271896]
运行了100次,平均运行时间差(bidirectional_bubble_sort3-shell_sort3)(正数代表你是个弟弟)是:0.06586106062
前者(bidirectional_bubble_sort3)平均运行时间0.06919025183,后者(shell_sort3)平均运行时间0.00332919121,前者约是后者的20.7829倍

  与插入排序相比:比插入慢,是其时间的2倍左右

详细数据:[0.03499317169, 0.03396701813, 0.03796577454, 0.03499388695, 0.03595423698, 0.03402686119, 0.03399848938, 0.03696060181, 0.03297901154, 0.03497552872, 0.03296375275, 0.03398108482, 0.03396
248817, 0.03596591949, 0.03400611877, 0.03496527672, 0.03300404549, 0.03499364853, 0.03499746323, 0.03499794006, 0.03396677971, 0.03300309181, 0.0349817276, 0.03496956825, 0.03496623039, 0.04297542572, 0.03200554848, 0.03296232224, 0.03700256348, 0.03296637535, 0.03199267387, 0.03495168686, 0.03296113014, 0.0339653492, 0.03396773338, 0.04295682907, 0.03298091888, 0.03396201134, 0.03394603729, 0.03399896622, 0.03401470184, 0.03497982025, 0.0329682827, 0.03398132324, 0.03697824478, 0.03496456146, 0.032964468, 0.03499603271, 0.03398656845, 0.03500056267, 0.03497743607, 0.03496861458, 0.03198051453, 0.03301119804, 0.03498029709, 0.0329811573, 0.03496718407, 0.03498005867, 0.03297972679, 0.03398108482, 0.03398156166, 0.03398990631, 0.03296685219, 0.0310087204, 0.03398942947, 0.0319647789, 0.03597855568, 0.03496909142, 0.03296422958, 0.03497958183, 0.0349984169, 0.03496170044, 0.03397202492, 0.03300476074, 0.03299379349, 0.03299474716, 0.03499293327, 0.03394889832, 0.03499150276, 0.03497171402, 0.03794336319, 0.0339756012, 0.03396725655, 0.03196263313, 0.03396320343, 0.03501653671, 0.03497958183, 0.03299164772, 0.03298211098, 0.03599739075, 0.03400588036, 0.03201532364, 0.03499317169, 0.03597450256, 0.03496170044, 0.03801369667, 0.0339820385, 0.03498077393, 0.03398084641, 0.03498029709]
运行了100次,平均运行时间差(bidirectional_bubble_sort3-insertion_sort4)(正数代表你是个弟弟)是:0.03445067883
前者(bidirectional_bubble_sort3)平均运行时间0.06767181158,后者(insertion_sort4)平均运行时间0.03322113276,前者约是后者的2.0370倍

  与选择排序相比:比选择排序慢,是选择的2倍左右

详细数据:[0.02798295021, 0.03098106384, 0.02998280525, 0.02996516228, 0.03795814514, 0.03196191788, 0.03199958801, 0.03201460838, 0.0299642086, 0.03096485138, 0.03197264671, 0.03399443626, 0.031999
82643, 0.03397583961, 0.03199720383, 0.03199839592, 0.03298139572, 0.03300595284, 0.0359787941, 0.02999973297, 0.03299283981, 0.03298425674, 0.03295087814, 0.03094530106, 0.02994942665, 0.0329785347, 0.03194737434, 0.03298020363, 0.03097820282, 0.02999544144, 0.03301692009, 0.03300237656, 0.03396272659, 0.03398346901, 0.03198122978, 0.03298258781, 0.03200244904, 0.0319814682, 0.03098106384, 0.0300142765, 0.03398036957, 0.03401565552, 0.03099370003, 0.03095555305, 0.03199458122, 0.03099370003, 0.03498530388, 0.03397893906, 0.0319750309, 0.03297185898, 0.03401732445, 0.03198838234, 0.02898311615, 0.08495044708, 0.03097605705, 0.03498649597, 0.03095364571, 0.03195500374, 0.02899241447, 0.03494858742, 0.03295993805, 0.03196334839, 0.03396272659, 0.03295135498, 0.03197288513, 0.03097701073, 0.03300070763, 0.03199863434, 0.03398823738, 0.03297519684, 0.03296017647, 0.03296780586, 0.03399276733, 0.03398513794, 0.03099942207, 0.03196954727, 0.03098726273, 0.03196763992, 0.03496670723, 0.03401255608, 0.03197717667, 0.03097891808, 0.0310177803, 0.03499245644, 0.03198575974, 0.03298282623, 0.03697443008, 0.03396677971, 0.03198218346, 0.0319955349, 0.03196620941, 0.03297662735, 0.03196763992, 0.03096342087, 0.03297567368, 0.03198027611, 0.03296375275, 0.03198623657, 0.0329709053, 0.03398156166]
运行了100次,平均运行时间差(bidirectional_bubble_sort3-select_sort2)(正数代表你是个弟弟)是:0.03293031931
前者(bidirectional_bubble_sort3)平均运行时间0.06903054476,后者(select_sort2)平均运行时间0.03610022545,前者约是后者的1.9122倍

  

  

python 排序冒泡排序与双向冒泡排序的更多相关文章

  1. PHP实现冒泡排序、双向冒泡排序算法

    冒泡排序(Bubble Sort),是一种较简单的.稳定的排序算法.冒泡排序算法步骤:比较相邻的元素,如果第一个比第二个大,就交换他们两个的位置:对每对相邻的元素执行同样的操作,这样一趟下来,最后的元 ...

  2. python排序算法之一:冒泡排序(及其优化)

    相信冒泡排序已经被大家所熟知,今天看了一篇文章,大致是说在面试时end在了冒泡排序上,主要原因是不能给出冒泡排序的优化. 所以,今天就写一下python的冒泡排序算法,以及给出一个相应的优化.OK,前 ...

  3. python排序之二冒泡排序法

    python排序之二冒泡排序法 如果你理解之前的插入排序法那冒泡排序法就很容易理解,冒泡排序是两个两个以向后位移的方式比较大小在互换的过程好了不多了先上代码吧如下: 首先还是一个无序列表lis,老规矩 ...

  4. Python排序算法之冒泡排序

    冒泡排序 顾名思义,冒泡排序直观的意思是气泡越大冒的越快:),对应到我们的列表中就是数字最大的先选出来,然后依次进行.例如 myList = [1,4,5,0,6],比较方式为: 相邻的两个数字先进行 ...

  5. 算法 排序lowB三人组 冒泡排序 选择排序 插入排序

    参考博客:基于python的七种经典排序算法   [经典排序算法][集锦]     经典排序算法及python实现 首先明确,算法的实质 是 列表排序.具体就是操作的列表,将无序列表变成有序列表! 一 ...

  6. Problem D: 双向冒泡排序

    Problem D: 双向冒泡排序 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 447  Solved: 197[Submit][Status][We ...

  7. java数组中的三种排序方法中的冒泡排序方法

    我记得我大学学java的时候,怎么就是搞不明白这三种排序方法,也一直不会,现在我有发过来学习下这三种方法并记录下来. 首先说说冒泡排序方法:冒泡排序方法就是把数组中的每一个元素进行比较,如果第i个元素 ...

  8. 【PHP面试题】通俗易懂的两个面试必问的排序算法讲解:冒泡排序和快速排序

    又到了金三银四找工作的时间,相信很多开发者都在找工作或者准备着找工作了.一般应对面试,我们无可厚非的去刷下面试题.对于PHPer来说,除了要熟悉自己所做的项目,还有懂的基本的算法.下面来分享下PHP面 ...

  9. python 排序算法

    冒泡排序: 一. 冒泡排序的定义 冒泡排序(英语:Bubble Sort)是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.遍历数列的工作是重复地进 ...

随机推荐

  1. springcloud学习之路: (四) springcloud集成Hystrix服务保护

    Hystrix是一套完善的服务保护组件, 可以实现服务降级, 服务熔断, 服务隔离等保护措施 使用它可以合理的应对高并发的情况 做到保护服务的效果 1. 导入依赖 <dependency> ...

  2. (转)linux内核虚拟文件系统浅析【转】

    转自:https://www.cnblogs.com/woainilsr/p/3590716.html 转自http://hi.baidu.com/_kouu/item/4e9db8758032824 ...

  3. scanf的返回值

    参考这个博客,https://blog.csdn.net/sinat_40936062/article/details/84348021 #include<stdio.h> int mai ...

  4. conan使用(三)--打包只有头文件的库

    参考:https://docs.conan.io/en/latest/howtos/header_only.html?highlight=header%20only 对于只含头文件的库打包非常简单,以 ...

  5. 【洛谷P5331】 [SNOI2019]通信

    洛谷 题意: \(n\)个哨站排成一列,第\(i\)个哨站的频段为\(a_i\). 现在每个哨站可以选择: 直接连接到中心,代价为\(w\): 连接到前面某个哨站\(j(j<i)\),代价为\( ...

  6. 初次运行git时的配置

    初次运行git时的配置 # 参考文档 https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%88%9D%E6%AC%A1%E8%BF%90%E8% ...

  7. Nginx的代理配置(六)

    一.正向代理 1. 指令说明 (1) resolver 这个用于设置DNS服务器的ip .DNS服务器的主要工作是进行域名解析,将域名映射为对应IP地址. 语法:resolver address .. ...

  8. Machine Learning in Finance – Present and Future Applications

    https://emerj.com/ai-sector-overviews/machine-learning-in-finance/ Machine learning has had fruitful ...

  9. appium--连续滑动

    TouchAction 在之前说过了滑动swip,那种是两点之间的滑动,比如上滑,左滑等.但实际工作中会遇到一些复杂的场景,如九宫格的滑动等待,这时候就要使用TouchAction,TouchActi ...

  10. API加密框架原理解密

    关于框架的使用文章请参考: 前后端API交互如何保证数据安全性?:http://cxytiandi.com/blog/detail/20235 API数据加密框架monkey-api-encrypt: ...