vlambda博客
学习文章列表

彻底搞懂 冒泡排序算法

C语言经典算法

冒泡排序作为一维数组的典型应用


在江苏转本计算机大类的技能考察刚要中,明确要求掌握使用一维数组进行排序,

冒泡排序是排序算法的最经典,也是最有可能考察的算法

 

一、基本原理(由小到大)


冒泡排序(Bubble Sort)是一种排序算法

它会遍历若干次要排序的数列每次遍历时,它都会从前往后依次的比较相邻两个数的大小;

将相邻两个数比较,将大的调到后头。

如果有n个数,则要进行n-1趟比较。

在第1趟中要进行n-1次两两比较,在第j趟比较中要进行n-j次两两比较。

如果前者比后者大,则交换它们的位置。




二、冒泡排序的详细讲解


 

上图中有6个数,5 3 9 6 2 7

要进行6- 1 = 5趟比较。

这六个数组成的无序序列[5,9,3,6,2,7],由小到大排序。
按照冒泡排序算法,相邻元素两两比较,过程如下:


第一轮:

首先比较5和9,5比9小,所以元素位置不变:第一次交换结果为 [5, 9, 3, 6, 2, 7]

继续比较9和3,9比3大,所以互换位置:第二次交换结果为[5, 3, 9, 6, 2, 7]


彻底搞懂 冒泡排序算法

继续比较9和6,9比6大,所以互换位置:第三次交换结果为[5, 3, 6, 9, 2, 7]

继续比较9和2,9比2大,所以互换位置,第四次交换结果为[5, 3, 6, 2, 9, 7]

彻底搞懂 冒泡排序算法


继续比较9和7,9比7大,所以互换位置,第五次交换结果为[5, 3, 6, 2, 7, 9]

彻底搞懂 冒泡排序算法

这样一来 最大元素9像气泡一样,飘到了最右面。
这时候,我们的冒泡排序的第一轮结束了。数列最右侧的元素9可以认为是一个有序区域,有序区域目前只有一个元素。

 

第二轮冒泡排序

首先比较5和3,5比3大,所以互换位置,第二轮第一次交换结果为[3, 5, 6, 2, 7, 9]


彻底搞懂 冒泡排序算法

继续比较5和6,5比6小,所以元素位置不变,第二轮第二次交换结果为[3, 5, 6, 2, 7, 9]

继续比较6和2,6比2大,所以互换位置,第二轮第三次交换结果为[3, 5, 2, 6, 7, 9]


彻底搞懂 冒泡排序算法

继续比较6和7,6比7小,所以元素位置不变,第二轮第四次交换结果为[3, 5, 2, 6, 7, 9]
这样一来,经过两轮排序,右侧有序序列变成了两个元素。


 彻底搞懂 冒泡排序算法

第三轮交换结果为[3, 2, 5, 6, 7, 9]

彻底搞懂 冒泡排序算法第四轮交换结果为[2, 3, 5, 6, 7, 9]

彻底搞懂 冒泡排序算法第五轮交换结果为[2, 3, 5, 6, 7, 9]

彻底搞懂 冒泡排序算法

到此为止,元素变成有序的了




三、两种形式的代码的实现

 


彻底搞懂 冒泡排序算法



第二种带函数的冒泡排序的实现







四、转本考生需要关注

1.冒泡排序算法,不要死记
2.掌握函数调用
3.掌握数组的定义,初始化,数组元素的使用




2023 新生群 已经开放申请加入

超前计划 即将开始 

按要求 申请 即可加入

4月福利课程 即将上线

群内首发