今天面试,被问到冒泡排序优化,当时一脸懵逼,回来查了下。根据自己的理解进行了优化。 如果对数组进行正序排序,第一轮冒泡排序后,最大值被交换到最后一位。所以下一轮只对前n-1个数进行交换排序。如果,前n-1个数已经是正序排列,就不需要进行交换了,也就是排序可以结束。所以我用flag进行标记,如果新一轮排序发现,剩下数组已经正序,没有发生交换,就跳出循环,不再进行排序。
public class BubbleSort {
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[] = new int[]{1 , 5 , 6 , 20 , 11 , 8 , 100 , 99};
Bubble(a);
}
public static void Bubble(int a[]){
int temp;
boolean flag = true;
for(int i = 0 ; i < a.length ; i++){
if(flag == false)
break;
flag = false;
for(int j = 0 ; j < a.length - i - 1 ; j++){
if(a[j] > a[j + 1]){
temp = a[j + 1];
a[j + 1] = a[j];
a[j] = temp;
flag = true;
}
System.out.print(a[j] + " ");
}
System.out.println("");
}
}
}