冒泡排序法(Bubble Sorting)是一种交换排序方法
基本思想:
每次仅进行相邻两个元素的比较,若为逆序(a(i)>a(i+1)),则将两个元素交换。
排序过程:
先将第一个元素和第二个元素进行比较,若为逆序,则交换之;接着比较第二个和第三个元素;依此类推,直到第n-1个元素和第n个元素进行比较、交换为止。如此经过一趟排序,使最大的元素被安置到最后一个元素的位置上。然后,对前n-1个元素进行同样的操作,使次大的元素被安置到第n-1个元素的位置上。重复以上过程,直到没有元素需要交换为止。
举例说明:
原始待排序数组【7 | 3 | 1 | 2 | 6 | 0】
从小到大排序
第一趟排序(外循环)
第一次两两比较 7>3 交换(内循环)
交换前状态【7 | 3】| 1 | 2 | 6 | 0 |
交换后状态【3 | 7】| 1 | 2 | 6 | 0 |
第二次两两比较 7>1 交换(内循环)
交换前状态 | 3 |【7 | 1】| 2 | 6 | 0 |
交换后状态 | 3 |【1 | 7】| 2 | 6 | 0 |
第三次两两比较 7>2 交换(内循环)
交换前状态 | 3 | 1 |【7 | 2】| 6 | 0 |
交换后状态 | 3 | 1 |【2 | 7】| 6 | 0 |
第四次两两比较 7>6 交换(内循环)
交换前状态 | 3 | 1 | 2 |【7 | 6】| 0 |
交换后状态 | 3 | 1 | 2 |【6 | 7】| 0 |
第五次两两比较 7>0 交换(内循环)
交换前状态 | 3 | 1 | 2 | 6 |【7 | 0】
交换后状态 | 3 | 1 | 2 | 6 |【0 | 7】
第二趟排序(外循环)
第一次两两比较 3>1 交换(内循环)
交换前状态【3 | 1】| 2 | 6 | 0 | 7 |
交换后状态【1 | 3】| 2 | 6 | 0 | 7 |
第二次两两比较 3>2 交换(内循环)
交换前状态 | 1 |【3 | 2】| 6 | 0 | 7 |
交换后状态 | 1 |【2 | 3】| 6 | 0 | 7 |
第三次两两比较 3<6 不交换(内循环)
交换前状态 | 1 | 2 |【3 | 6】| 0 | 7 |
交换后状态 | 1 | 2 |【3 | 6】| 0 | 7 |
第四次两两比较 6>0 交换(内循环)
交换前状态 | 1 | 2 | 3 |【6 | 0】| 7 |
交换后状态 | 1 | 2 | 3 |【0 | 6】| 7 |
第五次两两比较 6<7 不交换(内循环)
交换前状态 | 1 | 2 | 3 | 0 |【6 | 7】
交换后状态 | 1 | 2 | 3 | 0 |【6 | 7】
第三趟排序(外循环)
第一次两两比较 1<2 不交换(内循环)
交换前状态【1 | 2】| 3 | 0 | 6 | 7 |
交换后状态【1 | 2】| 3 | 0 | 6 | 7 |
第二次两两比较 2<3 不交换(内循环)
交换前状态 | 1 |【2 | 3】| 0 | 6 | 7 |
交换后状态 | 1 |【2 | 3】| 0 | 6 | 7 |
第三次两两比较 3>0 交换(内循环)
交换前状态 | 1 | 2 |【3 | 0】| 6 | 7 |
交换后状态 | 1 | 2 |【0 | 3】| 6 | 7 |
第四次两两比较 3<6 不交换(内循环)
交换前状态 | 1 | 2 | 0 |【3 | 6】| 7 |
交换后状态 | 1 | 2 | 0 |【3 | 6】| 7 |
第五次两两比较 6<7 不交换(内循环)
交换前状态 | 1 | 2 | 0 | 3 |【6 | 7】
交换后状态 | 1 | 2 | 0 | 3 |【6 | 7】
第四趟排序
第一次两两比较 1<2 不交换(内循环)
交换前状态【1 | 2】| 0 | 3 | 6 | 7 |
交换后状态【1 | 2】| 0 | 3 | 6 | 7 |
第二次两两比较 2>0 交换(内循环)
交换前状态 | 1 |【2 | 0】| 3 | 6 | 7 |
交换后状态 | 1 |【0 | 2】| 3 | 6 | 7 |
第三次两两比较 2<3 不交换(内循环)
交换前状态 | 1 | 0 |【2 | 3】| 6 | 7 |
交换后状态 | 1 | 0 |【2 | 3】| 6 | 7 |
第四次两两比较 3<6 不交换(内循环)
交换前状态 | 1 | 0 | 2 |【3 | 6】| 7 |
交换后状态 | 1 | 0 | 2 |【3 | 6】| 7 |
第五次两两比较 6<7 不交换(内循环)
交换前状态 | 1 | 0 | 2 | 3 |【6 | 7】
交换后状态 | 1 | 0 | 2 | 3 |【6 | 7】
第五趟排序
第一次两两比较 1>0 交换(内循环)
交换前状态【1 | 0】| 2 | 3 | 6 | 7 |
交换后状态【0 | 1】| 2 | 3 | 6 | 7 |
第二次两两比较 1<2 不交换(内循环)
交换前状态 | 0 |【1 | 2】| 3 | 6 | 7 |
交换后状态 | 0 |【1 | 2】| 3 | 6 | 7 |
第三次两两比较 2<3 不交换(内循环)
交换前状态 | 0 | 1 |【2 | 3】| 6 | 7 |
交换后状态 | 0 | 1 |【2 | 3】| 6 | 7 |
第四次两两比较 3<6 不交换(内循环)
交换前状态 | 0 | 1 | 2 |【3 | 6】| 7 |
交换后状态 | 0 | 1 | 2 |【3 | 6】| 7 |
第五次两两比较 6<7 不交换(内循环)
交换前状态 | 0 | 1 | 2 | 3 |【6 | 7】
交换后状态 | 0 | 1 | 2 | 3 |【6 | 7】
以上就是数组【7 | 3 | 1 | 2 | 6 | 0】冒泡排序的全过程
排序完毕,输出最终结果 【0 | 1 | 2 | 3 | 6 | 7】
代码仅供参考:
核心代码: