冒泡排序仅仅在相邻两个元素间进行比较和交换。下面的程序实现了对某个整型数组中的元素进行冒泡排序,它在保证逻辑正确的前提下,避免了冗余的比较。请填写缺少的代码。
int[]targetArr = {3,22,11,5,400,99,20,22,5};
for(inti=0; i<targetArr.length-1; i++)
{
for(int j=0; j<______________; j++)
{
if(targetArr[j]>targetArr[j+1])
{
inttmp = targetArr[j];
targetArr[j]= targetArr[j+1];
targetArr[j+1]= tmp;
}
}
}
总结:关键点有两个一个是数组的值进行置换,还有一个就是双重循环!外循环表示的是进行多少趟比较,而内循环表示就是在每一趟中对每一个数进行大小的比较,然后再进行置换!每一趟中都把最大值放到最后!而下一趟就不用上一趟的最大值进行比较!这就是冒泡排序的基本算法!
也可以这么理解,有n个数就要进行(n-1)次比较!为什么是(n-1)次,根据冒泡排序的算法,每一趟的目的就是把当前这一趟的最大的值放到最后!比较(n-1)次后,第n趟也就不用比较都可以得知!例如有三个数:5、6、4.
第一趟:5、4、6
第二趟:4、5、6
完整代码:
publicclass Demo3
{
public static void main (String args[])
{
int[] targetArr = {3,22,11,5,400,99,20,22,5};
for(int i=0; i<targetArr.length-1;i++)
{
for(int j=0; j<targetArr.length-i-1; j++)
{
if(targetArr[j]>targetArr[j+1])
{
inttmp = targetArr[j];
targetArr[j] = targetArr[j+1];
targetArr[j+1] = tmp;
}
}
}
for(int i=0; i<targetArr.length; i++)
{
System.out.print(targetArr[i]+"\t");
}
}
}