vlambda博客
学习文章列表

一张图让你秒懂冒泡排序


有头发且有趣的码农万里挑一~ 

18

有料叔 | 一位有故事的程序猿

一张图让你秒懂冒泡排序


python语言是近几年比较火的语言,市面上关于数据算法的写法c语言,java的比较多,python的不是很多,今天我就给大家分享一下用python书写冒泡排序,快速排序,还有二分查找,当然在上代码之前,我们去走进算法之家,了解一下冒泡排序和快速排序这两个成员吧,let‘s go!

一张图让你秒懂冒泡排序

大家好,我的中文名字叫冒泡排序,英文名字叫Bubble Sort,我在我们家族是中是比较"温和的",用你们的语言翻译过来就是,是一种比较简单的排序算法。我可以重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行,直到没有再需要交换,也就是说该数列已经排序完成。我的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。


我是如何运作的呢,今天给大家讲解一下:

第一:比较相邻的元素。比如第一个比第二个大(升序),就交换他们两个

第二:对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。

第三:针对所有的元素重复以上的步骤,除了最后一个

第四:持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。


嘿嘿,大家对我的工作有一定了解了吗,如果还没有的话,给大家看一下我的具体分析步骤吧,相信大家看完之后,一定就会认为我很“温和”,一定会喜欢我的。


一张图让你秒懂冒泡排序


我知道大家最近很喜欢我的新的partner,python欧巴,那么我就用python来实现一下我的灵魂代码吧,请大家认真观看我和python欧巴的表演。


一张图让你秒懂冒泡排序


表演完毕,此处应该有掌声,(掌声在哪里,让我听见你们的声音......)


弱弱的说,上面跟python欧巴配合的不是很完美,需要优化,大家可以看得出来吗?


我给大家倾诉一下吧,假设现在有一个数组[6,1,2,3,4,5],当我们进行完第一次冒泡排序过程后变为[1,2,3,4,5,6],这时候数组已经变成有序的了,程序要是再继续循环是一直在做无用功,那怎么知道数组已经是有序的了呢?计算机又不跟人类一样能眼观大局,它看不到怎么办呢,于是它就再试一次呗,接下来再进行一次冒泡排序,1和2, 2和3, 3和4, 4和5, 5和6(好累,幸亏就tm六个数)依次冒泡,计算机会发现,这次比较数组的元素都不动,于是计算机就想,既然他们那么懒,我也不管了,老子不干了!于是乎,排序程序截止了,之后计算机惊奇的发现,输出的结果竟然排好序了!(心想,还TMD真排好了,我是谁,我在哪?)

一张图让你秒懂冒泡排序

为什么数组的元素不动了呢,相信聪明的你们已经发现了,就是因为排序已经排好了,所以不动了,那么怎么才能让我跟欧巴配合的更好的,我们昨天复盘了一夜,终于有了更好的配合方案,lady们and乡亲们,希望大家在来看一次我们的表演,次日某剧场,表演开始。


一张图让你秒懂冒泡排序

非常感谢大家的收看,希望大家喜欢,如果有任何疑问,都可以在评论区评论,留言,爱你们哟。

一张图让你秒懂冒泡排序