原理:一个数组里,相邻的两个元素进行比较,两两比较。
基本冒泡排序:
使用双层for循环,外层循环代表比较的轮数(数组元素个数-1),内层循环代表每轮比较多少次(数组元素个数-1)。
public class BubbleSort {
public static void main(String[] args) {
int A[]= {1,6,5,9};
for(int i=0;i<A.length-1;i++) {
for(int j=0;j<A.length-1;j++) {
if(A[j]>A[j+1]) {
temp=A[j];
A[j]=A[j+1];
A[j+1]=temp;
}
}
}
System.out.println(Arrays.toString(A));
}
}
基本冒泡排序的缺点:每轮循环都要比较到最后,对于循环的轮数;
不管是都是有序都会执行元素个数-1次,效率低
优化冒泡排序:
加入判断是否是有序对列;每轮比较次数逐次递减。
public class Bubble{
public static void main(String[] args) {
int A[]= {1,3,5,9};
int temp;
int count=0;
boolean flag;
for(int i=0;i<A.length-1;i++) {
flag=true;
count++;
for(int j=0;j<A.length-1-i;j++) {
if(A[j]>A[j+1]) {
temp=A[j];
A[j]=A[j+1];
A[j+1]=temp;
flag=false;
}
}
if(flag) {
break;
}
}
System.out.println(Arrays.toString(A));
System.out.println(count);
}
}
原本应该执行3次,结果只执行了1次。