(1)当在规定循环次数之内已经排序ok了,却还在比较,比较麻烦,比如:
?
原来数组:int[] arr={2,4,6,7,1,3,5,9,10};
排序如下:
循环的结果:2?? ?4?? ?6?? ?1?? ?3?? ?5?? ?7?? ?9?? ?10?? ? 循环的结果:2?? ?4?? ?1?? ?3?? ?5?? ?6?? ?7?? ?9?? ?10?? ? 循环的结果:2?? ?1?? ?3?? ?4?? ?5?? ?6?? ?7?? ?9?? ?10?? ? 循环的结果:1?? ?2?? ?3?? ?4?? ?5?? ?6?? ?7?? ?9?? ?10?? ? 循环的结果:1?? ?2?? ?3?? ?4?? ?5?? ?6?? ?7?? ?9?? ?10?? ? 循环的结果:1?? ?2?? ?3?? ?4?? ?5?? ?6?? ?7?? ?9?? ?10?? ? 循环的结果:1?? ?2?? ?3?? ?4?? ?5?? ?6?? ?7?? ?9?? ?10?? ? 循环的结果:1?? ?2?? ?3?? ?4?? ?5?? ?6?? ?7?? ?9?? ?10?? ? 循环的结果:1?? ?2?? ?3?? ?4?? ?5?? ?6?? ?7?? ?9?? ?10?? ?
(2)更改的核心是 判断每次循环是否执行交换
如下使用布尔值:
代码如下:
package Package;
public class text5 {
//升级版的冒泡排序
public static void main(String[] args) {
boolean a=true;
int[] arr={2,4,6,7,1,3,5,9,10};
//发生几次循环,每次循环得出一个最大值
for(int i=1;i<arr.length && a==true;i++)
{
a=false; //如果执行交换,则下一次可以执行,否则false,不能执行循环
//根据关系图找到关系,每次循环对比的次数
for (int j=0;j< arr.length-i ;j++)
{
if(arr[j]>arr[j+1])
{
a=true;
int tmp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=tmp;
}
}
show(arr);
}
show(arr);
}
public static void show(int[] arr) {
System.out.print("循环的结果:");
for(int j=0;j< arr.length;j++)
System.out.print(arr[j]+"\t");
System.out.println();
}
}y运行结果如下:
?
|