算法思想
- 比较相邻的元素,如果前一个元素比后一个元素大,就交换这两个元素的位置
- 对每一对相邻元素做同样工作,从开始第一对元素到结尾的最后一对元素.最终最后位置的元素就是最大值
public class Bubble {
public static void main(String[] args) {
int[] b = {3,7,1,6,2,5,4,0}; //b.length = 8
bubble(b);
}
public static void bubble(int[] arr){
int temp = 0;
boolean flag;
//从后往前
for (int i = arr.length-1 ;i>0;i--) {
flag = true;
//从前往后
for (int j=0;j<i;j++){
if (arr[j]>arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
flag = false;
}
}
if(flag)break;
}
System.out.println(Arrays.toString(arr));
}
}
在数据完全有序的时候为最优时间复杂度,为O(n)。其它情况,几乎总是O( n2 )。因此,算法在数据基本有序的情况下,性能最好。
优化:增加一个flag的标志,当前一轮没有进行交换时,说明数组已经有序,没有必要再进行下一轮的循环了,直接退出。