首页 > 代码库 > 冒泡排序

冒泡排序

一、冒泡排序概念以及分析

  数组里面,相邻的两个数相比较,小的数放到前面,大的数放到后面。

  第一次比较:第一个数和第二个数比较,小的数放在前面,大的数放在后面。然后第二个数和第三个数相比较,小的数放在前面,大的数放在后面,依次类推,直到最后两个数字比较完,第一次比较结束;这个时候,最后一位数已经是最大的数,第二次比较就不用把最后一位数考虑进去。

  第二次比较:第一个数和第二个数比较,小的数放在前面,大的数放在后面。然后第二个数和第三个数相比较,小的数放在前面,大的数放在后面,依次类推,直到最后两个数字比较完,第二次比较结束;这个时候,倒数第二位数已经是最大的数,第三次比较就不用把倒数第二位考虑进去。

  第三次比;第四次;第五次;这样依次比较,就会排序到从小到大。

二、实现思路

  这里每次比较都是重复动作,所有我们可以要用到循环来减少写代码的次数;并且要用到两重循环;

  1.外循环变量定义为i,内层循环变量定义为j,外循环表示循环多少次,内循环表示每次是那两个元素比较;

  2.如果这个数组长度为n,外循环重复n-1次,内循环依次重复n-1,n-2,n-3.....1次;

  3.内循环变量j表示数组的索引下标;每次比较的两个元素则是a[j]和a[j-1];

  4.数字交换需要用到第三个变量;

  5.排序过后将数组遍历输出。

三、代码实现

  int []a=new int [n];//定义一个长度为n的数组

   for(int i=1;i<a.length;i++){//外层循环;比较总次数

               boolean Isfind=false;//定义一个布尔值,减少不必要的循环,如果第二趟就刚好排序成功,就不用继续排序了

    for(int j=0;j<a.leng-i;j++){//内层循环,每次比较的次数

      if(a[j]>a[j+a]){

      int temp=a[j];

      a[j]=a[j+1];

      a[j+1]=temp;

               Isfind=true;

}

}

   if(!Isfind)    break;//如果Isfind为假,则结束循环

}

//排序结束,遍历输出数组

 for(int i=0;i<a.length;i++){

  systmep.out.print(a[j]);

}

 

冒泡排序