冒泡排序就是对比前后两个值,再通过中间值,经行交换,小往前排,大往后排。完成一轮,最大值在数组最后一位,然后再冒泡比较第二大的值,因为已经确定了一个值,比较数组长度-1,第二重for循环长度-1。
一般冒泡排序
public static void maoPaoDeal(int[] d){
int e = 0;
for(int i = 0 ; i < d.length; i++){
for(int j = 0 ; j < d.length - i - 1; j++){
if(d[j] > d[j+1]){
e = d[j+1];
d[j+1] = d[j];
d[j] = e;
}
}
System.out.println(Arrays.toString(d));
}
}
在最后几排其实已经完成排序,但是还是接着循环,所以我们要在其小循环内部(第二重循环),不在交换前后值的时候,就说明完成了排序,加一个判断,满足条件退出循环
优化后冒泡排序
public static void maoPaoDeal(int[] d){
int e = 0;
for(int i = 0 ; i < d.length; i++){
boolean flag = true;
for(int j = 0 ; j < d.length - i - 1; j++){
if(d[j] > d[j+1]){
flag = false;
e = d[j+1];
d[j+1] = d[j];
d[j] = e;
}
}
//当内部不在判断和交换位置,就退出循环
if(flag){
break;
}
System.out.println(Arrays.toString(d));
}
}