冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。
它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。
1) 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2) 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3) 针对所有的元素重复以上的步骤,除了最后一个。
4) 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
5) 例子为从小到大排序,
6) 原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 |
7) 第一趟排序(外循环)
8) 第一次两两比较6 > 2交换(内循环)
9) 交换前状态| 6 | 2 | 4| 1 | 5 | 9 |
10) 交换后状态| 2 | 6 | 4| 1 | 5 | 9 |
11) 第二次两两比较,6 > 4交换
12) 交换前状态| 2 | 6 | 4 | 1 | 5 | 9 |
13) 交换后状态| 2 | 4 | 6 | 1 | 5 | 9 |
14) 第三次两两比较,6 > 1交换
15) 交换前状态| 2 | 4 | 6 | 1 | 5 | 9 |
16) 交换后状态| 2 | 4 | 1 | 6 | 5 | 9 |
17) 第四次两两比较,6 > 5交换
18) 交换前状态| 2 | 4 | 1 | 6 | 5 | 9 |
19) 交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |
20) 第五次两两比较,6 < 9不交换
21) 交换前状态| 2 | 4 | 1 | 5 | 6 | 9 |
22) 交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |
23) 第二趟排序(外循环)
24) 第一次两两比较2 < 4不交换
25) 交换前状态| 2 | 4 | 1| 5 | 6 | 9 |
26) 交换后状态| 2 | 4 | 1| 5 | 6 | 9 |
27) 第二次两两比较,4 > 1交换
28) 交换前状态| 2 | 4 | 1 | 5 | 6 | 9 |
交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |
29) 第三次两两比较,4 < 5不交换
30) 交换前状态| 2 | 1 | 4 | 5 | 6 | 9 |
交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |
31) 第四次两两比较,5 < 6不交换
32) 交换前状态| 2 | 1 | 4 | 5 | 6 | 9 |
33) 交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |
34) 第三趟排序(外循环)
35) 第一次两两比较2 > 1交换
36) 交换后状态| 2 | 1 | 4| 5 | 6 | 9 |
37) 交换后状态| 1 | 2 | 4| 5 | 6 | 9 |
38) 第二次两两比较,2 < 4不交换
39) 交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |
交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |
40) 第三次两两比较,4 < 5不交换
41) 交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |
交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |
42) 第四趟排序(外循环)无交换
43) 第五趟排序(外循环)无交换
44) 排序完毕,输出最终结果12 4 5 6 9