
1.3.1 冒泡排序
冒泡排序,顾名思义,就像烧开水的壶底的气泡一样,不断地上冒,如果从小到大排序,第一次最大的会冒出来,第二次次大的会冒上来,以此类推,直到整个数组都排序完成。现在需要对数字5,4,3,1,2进行排序,我们借助图例来仔细讲解冒泡排序。
(1)我们要开始第一次冒泡,第一次冒泡的目的是将最大的数字5冒泡到数组的顶部。冒泡策略就是从第一个数开始,依次往后比较,如果前面的数比后面的数大就交换,否则不做处理,通过不断的交换将数字冒出来。第一次是5和4比较,因为5比4大,所以进行交换,交换完成后的排序是4,5,3,1,2;然后第二次是5和3比较,因为5比3大,所以交换,交换完成后的排序是4,3,5,1,2;然后第三次是5和1比较,因为5比1大,所以交换,交换完成后的排序是4,3,1,5,2;最后第四次是5和2比较,因为5比2大,所以交换,交换完成后的排序是4,3,1,2,5,这样最大的数字5就冒了出来,如图1.10所示。

图1.10 第一次冒泡排序
(2)我们要开始第二次冒泡,经过第一次冒泡排序,现在的数字序列是4,3,1,2,5。第二次冒泡的目的是将次大的数字4冒泡到数组的次顶部,冒泡的策略还是一样,从第一个数开始,依次往后比较,如果前面的数比后面的数大就交换,否则不做处理,通过不断的交换将数字冒出来。第一次是4和3比较,因为4比3大,所以进行交换,交换完成后的排序是3,4,1,2,5;然后第二次是4和1比较,因为4比1大,所以交换,交换完成后的排序是3,1,4,2,5;第三次是4和2比较,因为4比2大,所以交换,交换完成后的排序是3,1,2,4,5。这样次大的数字4就冒出来了,如图1.11所示。

图1.11 第二次冒泡排序
(3)我们要开始第三次冒泡,经过第二次冒泡排序,现在的数字序列是3,1,2,4,5。第三次冒泡的目的是将剩下未排序的最大的数字3冒泡到数组的相应位置,冒泡的策略还是一样,从第一个数开始,依次往后比较,如果前面的数比后面的数大就交换,否则不做处理,通过不断的交换将数字冒出来。第一次是3和1比较,因为3比1大,所以进行交换,交换完成后的排序是1,3,2,4,5;第二次是3和2比较,因为3比2大,所以交换,交换完成后的排序是1,2,3,4,5。这样第三大的数字3就冒出来了,如图1.12所示。
(4)我们要开始第四次冒泡,经过第三次冒泡排序,现在的数字序列是1,2,3,4,5。第四次冒泡的目的是将剩下未排序的最大的数字2冒泡到数组的相应位置,冒泡的策略还是一样,从第一个数开始,依次往后比较,如果前面的数比后面的数大就交换,否则不做处理,通过不断的交换将数字冒出来。第一次是1和2比较,因为1比2小,所以不做处理,排序保持不变,还是1,2,3,4,5。这样第四大的数字2就冒出来了,如图1.13所示。

图1.12 第三次冒泡排序

图1.13 第四次冒泡排序
通过上面的图解,相信大家对冒泡排序算法已经有了了解,冒泡排序算法的实质就是两两比较,不断冒泡,那么接下来我们就要通过程序来实现冒泡排序,把整个冒泡过程通过程序体现出来。冒泡排序算法完整代码如下。


冒泡排序运行结果如图1.14所示。

图1.14 冒泡排序运行结果
可以发现,程序的运行结果和前面的分析结果是一致的。我们已经成功地通过程序将冒泡排序的内部细节进行了展示。冒泡排序属于交换排序中的一种,上面的图解以及程序每次将前后紧连的两个数字进行交换,其目的是每次将最大的数字通过不断的交换冒泡出来。