如果我们发现在某趟排序中,没有发生一次交换,可以提前结束冒泡排序
int arr2[]={3,9,-1,10,20};
int temp2=0;//定义一个中间变量
boolean flag=false;//标识变量,表示是否进行过交换
for (int i=0;i<arr2.length-1;i++){
for (int j=0;j<arr2.length-1-i;j++){
if (arr2[j] > arr2[j+1]) {
flag=true;
temp2 = arr2[j];
arr2[j] = arr2[j + 1];
arr2[j + 1] = temp2;
}
}
System.out.print("第"+(i+1)+"趟排序后的数组:");
System.out.println(Arrays.toString(arr2));
if(!flag){//在一趟排序中,一次交换都没有发生过
break;
}else{
flag=false;//重置flag,进行下次判断
}
}
将前面的冒泡排序算法,封装成一个方法
public static void bubbleSort(int[] arr2){
int temp2=0;//定义一个中间变量
boolean flag=false;//标识变量,表示是否进行过交换
for (int i=0;i<arr2.length-1;i++){
for (int j=0;j<arr2.length-1-i;j++){
if (arr2[j] > arr2[j+1]) {
flag=true;
temp2 = arr2[j];
arr2[j] = arr2[j + 1];
arr2[j + 1] = temp2;
}
}
//System.out.print("第"+(i+1)+"趟排序后的数组:");
//System.out.println(Arrays.toString(arr2));
if(!flag){//在一趟排序中,一次交换都没有发生过
break;
}else{
flag=false;//重置flag,进行下次判断
}
}
}
测试冒泡排序的方法
int arr2[]={3,9,-1,10,20};
System.out.println("排序前");
System.out.println(Arrays.toString(arr2));
bubbleSort(arr2);
System.out.println("排序后");
System.out.println(Arrays.toString(arr2));