干货 | 冒泡排序

Posted ITeam学生专业社团

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了干货 | 冒泡排序相关的知识,希望对你有一定的参考价值。

Algorithm

冒泡排序 /基本思想

每次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来。


我们来举个例子

将95、26、14、73、57这5个数

进行从大到小的排序

既然需要从小到大排

就要求越大的数越靠后



比较/campare

首先比较第一位和第二位,发现95比26大,则需要将95与26的位置交换,交换后的排序为26、95、14、73、57;

接着比较第二位和第三位,发现95比14大,则需要交换95与14的位置,交换后的排序为26、14、95、73、57;

接着比较第三位和第四位,发现95比73大,则需要交换95与73的位置,交换后的排序为26、14、73、95、57;

最后比较第四位和第五位,发现95仍比57大,则需要交换95与57的位置,交换后的排序为26、14、73、57、95。

经过四次比较后,我们发现最大的一个数已经就位,是不是很神奇呢。


干货 | 冒泡排序



现在我们来捋一捋刚才比较的过程。每次都是比较相邻的两个数,如果后面的数比前面的数小,则交换这两个数的位置。一直比较下去直到最后两个数比较完毕后,最小的数就在最后一个了。就如同是一个气泡,一步一步往后“翻滚”,直到最后一位。所以这个排序的方法有一个很好听的名字——冒泡排序。

这样,在第一趟的最后,最大的那个数将会被移动到最右端,即倒数第一位,那么接下来,我们只需要找出倒数第二、倒数第三、倒数第四、倒数第五位,即第n-i位(i为趟数),并让他们依次归位即可完成排序。

事实上,五个数字只需要进行四趟排序归位,最后一个未归位的必定是最小的数字,无须再进行比较,所以n个数字,只需要进行n-1趟排序。

重复以上步骤走完第二趟,第三趟,第四趟,可以得到排序结果:14、28、57、73、95。

我们可以用一个双重循环来实现这个过程,外循环控制趟数,内循环用于相邻两个数的比较,如果它们的顺序错误就把它们交换过来。


话不多说,上代码


干货 | 冒泡排序
干货 | 冒泡排序


Summary

最后我们总结一下,如果有n个数进行排序,只需将n-1个数归位,也就是说要进行n-1趟操作。而每一趟都需要从第一位开始进行相邻两个数的比较,将较小的一个数放在后面,比较完毕后向后挪一位继续比较下面两个相邻数的大小,重复此步骤,直到最后一个尚未归为的书,已经归位的数则无须在进行比较。


上手练练吧!



图文|蔡沛基

排版|蔡沛基

初审|新闻组

终审|詹国荣

以上是关于干货 | 冒泡排序的主要内容,如果未能解决你的问题,请参考以下文章

干货丨Java算法之冒泡排序(超详细)

核桃干货 | Java算法之冒泡排序(超详细)

#yyds干货盘点#算法给小码农冒泡排序铭纹,快速排序四极

卧槽!冒泡排序有这么难???

如何实现冒泡排序?

排序算法—— 冒泡排序选择排序