vlambda博客
学习文章列表

【Alevel P2编程】一篇秒懂bubble sort(冒泡排序)

冒泡排序bubble sort,是排序算法中的经典之一,也是Alevel 的考试要点Alevel要求我们必须掌握的一种排序是一种基础的交换排序。

大家一定都喝过汽水汽水中常常有许多的小小的气泡哗啦哗啦飘到上面来这是因为组成小气泡的二氧化碳比水轻所以小气泡可以一点点地向上浮动

而冒泡排序之所以叫冒泡排序正是因为这种排序算法的每一个元素都可以像小气泡一样根据自身的大小一点点地向着数组的一侧移动

具体如何移动呢让我们一起先来看一个例子8个数字组成的一个无需数列{5,8,6,3,9,2,1,7},我们希望按照从小到大的顺序对其进行排序。

【Alevel P2编程】一篇秒懂bubble sort(冒泡排序)

按照冒泡排序的思想我们要把相邻的元素两两比较当一个元素大于右侧相邻元素时交换他们的位置当一个元素小于或等于右侧相邻元素时位置不变。详细过程如下:

【Alevel P2编程】一篇秒懂bubble sort(冒泡排序)

【Alevel P2编程】一篇秒懂bubble sort(冒泡排序)

【Alevel P2编程】一篇秒懂bubble sort(冒泡排序)

【Alevel P2编程】一篇秒懂bubble sort(冒泡排序)

【Alevel P2编程】一篇秒懂bubble sort(冒泡排序)

这样一来元素9作为数列中最大的元素,就像是汽水里的小气泡一样,“漂”到最右侧。

【Alevel P2编程】一篇秒懂bubble sort(冒泡排序)

时,冒泡排序的第1轮就结束了。数列最右侧元素9的位置可以认为是一个有序区域,有序区域目前只有1个元素。

下面让我们来进行第2轮排序。

【Alevel P2编程】一篇秒懂bubble sort(冒泡排序)

【Alevel P2编程】一篇秒懂bubble sort(冒泡排序)

【Alevel P2编程】一篇秒懂bubble sort(冒泡排序)

【Alevel P2编程】一篇秒懂bubble sort(冒泡排序)

2轮排序结束后,数列右侧的有序区域有了2个元素,顺序如下:

【Alevel P2编程】一篇秒懂bubble sort(冒泡排序)

后续的交换细节这里就不详细描述了3轮到第7轮的状态如下:

【Alevel P2编程】一篇秒懂bubble sort(冒泡排序)

到此为止所有元素都是有序的了这就是冒泡排序的整体思路

冒泡排序是一种稳定的排序值相等的元素并不会打乱原本的顺序由于该排序算法的每一轮都要遍历所有元素总共遍历(元素数量-1)轮

【Alevel P2编程】一篇秒懂bubble sort(冒泡排序)

冒泡排序的整体思路要用到两层循环外层循环控制比较的轮数应该是n-1

内层循环控制每一轮比较的次数每一轮下来因为都能冒出一个最大数所以每一轮的次数都上一轮少一次直到所有的数字排好序

python实现代码如下

代码非常简单使用双循环进行排序。外部循环控制所有的回合,内部循环实现每一轮冒泡处理,先进行元素比较,再进行元素交换。

下面来看看Alevel CS中伪代码的写法

是不是发现代码并不难理解呢但这只是冒泡排序的原始实现不够高效还存在很大的优化空间哦请听下回分解