冒泡排序原理详解

来源:互联网 发布:网络硬盘录像机连接图 编辑:程序博客网 时间:2024/05/16 01:34

在查阅资料和网上搜索前辈讲解分析后,通过操作分析终于搞明白了困扰已久的冒泡排序,记录如下:

原理是:临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,
这样一趟过去后,最大或最小的数字被交换到了最后一位,
然后再从头开始进行两两比较交换,直到倒数第二位时结束.代码如下 :

public class MaoPaoTest {public static void main(String[] args) {int[] num = {8,4,11,7,3};/*使用Java自己提供的Arrays.sort(数组类型)方法亦可完成java.util.Arrays.sort(num);*///System.out.println(num.length);for(int i=1;i<num.length;i++){for(int j=0;j<num.length-i;j++){if(num[j]>num[j+1]){//两两之间进行比较,大的放后,小的放前int temp = num[j];num[j] = num[j+1];num[j+1] = temp;}}System.out.print("第"+i+"趟排序后的结果:");for(int j=0;j<num.length;j++){System.out.print(num[j]+" ");}System.out.println();//换行}//排序完成后打印结果:for(int i=0;i<num.length;i++){System.out.print(num[i]+" ");}}}


以上程序分析:

示例如下(按从小到大排序):

原始待排序数组:| 8 | 4 | 11 | 7 | 3

第一趟排序(外循环)

进入内层循环:

第一次两两比较8 > 4 交换(内循环)

交换前状态| 8 | 4 | 11 | 7 | 3

交换后状态| 4 | 8 | 11 | 7 | 3
 
第二次两两比较,8 < 11,不交换

交换前状态| 4 | 8 | 11 | 7 | 3

交换后状态| 4 | 8 | 11 | 7 | 3

第三次两两比较,11 > 7 交换

交换前状态| 4 | 8 | 11 | 7 | 3

交换后状态| 4 | 8 | 7 | 11 | 3

第四次两两比较,11 > 3 交换

交换前状态| 4 | 8 | 7 | 11 | 3

交换后状态| 4 | 8 | 7 | 3 | 11
 
第二趟排序(外循环)

进入内层循环:

第一次两两比较4 < 8,不交换

交换前状态| 4 | 8 | 7 | 3 | 11

交换后状态| 4 | 8 | 7 | 3 | 11
 
第二次两两比较,8 > 7 交换

交换前状态| 4 | 8 | 7 | 3 | 11

交换后状态| 4 | 7 | 8 | 3 | 11
 
第三次两两比较,8 > 3 交换

交换前状态| 4 | 7 | 8 | 3 | 11

交换后状态| 4 | 7 | 3 | 8 | 11
 
第三趟排序(外循环)

进入内层循环:

第一次两两比较,4 < 7,不交换

交换前状态| 4 | 7 | 3 | 8 | 11

交换后状态| 4 | 7 | 3 | 8 | 11
 
第二次两两比较,7 > 3 交换

交换前状态| 4 | 7 | 3 | 8 | 11

交换后状态| 4 | 3 | 7 | 8 | 11
 
第四趟排序(外循环)

进入内层循环:

第一次两两比较,4 > 3 交换

交换前状态| 4 | 3 | 7 | 8 | 11

交换后状态| 3 | 4 | 7 | 8 | 11

排序完毕,输出最终结果:3 4 7 8 11

交换位置

0 0