31

看图轻松理解数据结构与算法:冒泡排序

 5 years ago
source link: https://mp.weixin.qq.com/s?__biz=MjM5MzA1Mzc3Nw%3D%3D&%3Bmid=2247484677&%3Bidx=1&%3Bsn=44cfdedb9789604ae04d48d245384c18&%3Bchksm=a69da83b91ea212dce0b840d1d9f97120b66f1006f87cc6c9ce5b089cc42fa3ed9db263
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

前言

推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。

冒泡排序

冒泡排序是一种很简单的排序算法,主要思想就是不断走访待排序序列,每次只比较两个相邻元素,如果这俩元素顺序不符合要求则对换它们,不断重复知道没有相邻元素需要对换。在不断走访比较过程中,越大的元素经过交换会慢慢走到数列顶端,所以看起来它就像气泡一样不断往上冒,于是就叫冒泡。

排序要点

  1. 比较相邻两个元素,如果前一元素比后一元素大则对换它们的位置。

  2. 从头开始对每一对相邻元素都执行1的对比工作,直至结尾最后一对,执行完一轮后,该轮最大的元素被换置到最后。

  3. 针对所有元素执行若干轮1和2操作,每次经过2操作后都会将该轮的最大值换置到该轮最后,而最后元素不参与下一轮。

  4. 每一轮对越来越少的元素重复3操作,直至没有任何一对元素需要比较。

排序过程

假设我们有如下5个元素,分别为 72,58,22,34,14 ,现在进行冒泡排序。

ZzIfeuE.jpg!web image

第一遍,对所有元素前后两个元素进行比较,

VRZ3ayi.jpg!web image

72比58大,两者对换,完成后继续与下一元素比较,

2YRZVzE.jpg!web image

72比22大,两者对换,完成后继续与下一元素比较,

MFBJf2I.jpg!web image

72比34大,两者对换,完成后继续与下一元素比较,

Ubieimj.jpg!web image

72比14大,两者对换,72已经到序列最顶端,它是这一轮的最大的元素。下一轮比较排除72,只需比较 58,22,34,14 。开始比较,

NFZVjer.jpg!web image

58比22大,两者对换,完成后继续与下一元素比较,

uUZ3mqn.jpg!web image

58比34大,两者对换,完成后继续与下一元素比较,

neYjmeQ.jpg!web image

58比14大,两者对换,58已经到该轮序列最顶端,它是这一轮的最大的元素。下一轮比较排除58,只需比较 22,34,14 。开始比较,

aUzuMfJ.jpg!web image

22比34小,两者不对换,继续与下一元素比较,

iE7rm2r.jpg!web image

34比14大,两者对换,34已经到该轮序列最顶端,它是这一轮的最大的元素。下一轮比较排除34,只需比较 22,14 。开始比较,

veIjumq.jpg!web image

22比14大,两者对换,22已经到该轮序列最顶端,它是这一轮的最大的元素。除了22后只剩一个元素,停止比较,至此完成了整个排序工作。

Nf6veqJ.jpg!web

--------------------------------------

跟我交流:

ruMri2J.png!web

-------------推荐阅读------------

我的开源项目汇总(机器&深度学习、NLP、网络IO、AIML、mysql协议、chatbot)

为什么写《Tomcat内核设计剖析》

2017文章汇总——机器学习篇

2017文章汇总——Java及中间件

2017文章汇总——深度学习篇

2017文章汇总——JDK源码篇

2017文章汇总——自然语言处理篇

2017文章汇总——Java并发篇


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK