思想:给一组数组,两两进行比较,当顺序错误时,进行位置的交换,需要一个中介帮助交换,一次排序过后,最大的一位数会排到数组最后(从小到大排),重复操作,即可得到排序好的数组。
优化:设置一个布尔值变量,标记数组是否达到了有序状态,当第一层外循环时,设置 flag 为 true, 表明此时数组是有序的,当内层循环发生交换时,就说明数组无序,需要继续交换,此时 flag 为 false, 一次排序之后 若 flag 仍然为 true, 说明不需要继续排序了。
代码:
public class BubbleSortDemo {
public static void main(String[] args) {
int[] values={2,5,8,4,3,7,9};
bubbleSort(values);
System.out.println(Arrays.toString(values));
}
public static void bubbleSort(int[] a){
int temp;
boolean flag;
//外层循环,当有 n 个数组,至多需要 n-1 躺排序
for(int i =0;i
//设置一个布尔值变量,标记数组是否达到了有序状态
flag =true;
//内层循环,每一趟都从数列的前两个元素开始比较,比较到无序数组的最后
for(int j=0;j
//如果前一个元素大于后一个元素,则交换位置
if(a[j] > a[j+1]){
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
//发生了交换,表明数组在本趟处于无序状态,需要继续比较,
// 即,只要发生了交换,flag 设为false
flag =false;
}
}
if(flag){
break;
}
}
}
}
网友评论