冒泡排序:

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

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. STM32F4 串口IAP程序要点

    1. IAP(bootloader)程序 1.1 内部Flash地址分配 /* Start of the Flash address */ #define STM32_FLASH_BASE 0x080 ...

  2. v8 编译 时长3小时

  3. 跟着ALEX 学python day2 基础2 模块 数据类型 运算符 列表 元组 字典 字符串的常用操作

    声明 : 文档内容学习于 http://www.cnblogs.com/xiaozhiqi/  模块初始: Python的强大之处在于他有非常丰富和强大的标准库和第三方库,几乎你想实现的任何功能都有相 ...

  4. mac 修改 vim 配色

    1. 看看系统有哪些自带配色方案 ls /usr/share/vim/vim73/colors README.txt darkblue.vim delek.vim elflord.vim koehle ...

  5. linux中以.d结尾的目录

    一般为了保持对原有配置方式的兼容,而增加的.d结尾目录. 如: /etc/X11/xorg.conf 这原本是个文件,现在也有了一个/etc/X11/xorg.conf.d这样的目录,显卡驱动的相关设 ...

  6. LeetCode 100. Same Tree相同的树 (C++)

    题目: Given two binary trees, write a function to check if they are the same or not. Two binary trees ...

  7. python异步编程

    python用asyncio 模块实现异步编程,该模块最大特点就是,只存在一个线程 由于只有一个线程,就不可能多个任务同时运行.asyncio 是"多任务合作"模式(coopera ...

  8. Linux引导过程与服务控制

    一:系统引导流程: 开机自检(BIOS)-->MBR引导-->GRUB菜单-->加载内核(kernel)-->init进程初始化  二:系统引导级别: 0 poweroff.t ...

  9. 【LG1600】[NOIP2016]天天爱跑步

    [LG1600][NOIP2016]天天爱跑步 题面 洛谷 题解 考虑一条路径\(S\rightarrow T\)是如何给一个观测点\(x\)造成贡献的, 一种是从\(x\)的子树内出来,另外一种是从 ...

  10. CF1149D Abandoning Roads(图论,最短路,状态压缩,最小生成树)

    题目大意:$n$ 个点,$m$ 条边的无向图,边权只有两种,小的为 $a$,大的为 $b$. 对于每个点 $p$,询问在这张图所有的最小生成树上,$1$ 到 $p$ 的最短距离的最小值. $2\le ...