思路分析
因为排序的过程中,各个元素不断接近自己的位置。如果经过某一趟比较下来没有进行交换,就说明序列有序,因此要在排序过程中设置一个标志flag判断元素是否进行过交换,从而减少不必要的比较。
package com.shujujiegou;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
public class Hello {
public static void main(String[] args) {
int arr[]=new int[]{3,9,-1,10,20};
System.out.println("排序前的数组是:"+Arrays.toString(arr));
System.out.println("***************");
maopao(arr);
System.out.println("***************");
System.out.println("排序后的数组是:"+Arrays.toString(arr));
}
//将前面的冒泡排序封装成一个方法
public static void maopao(int []arr){
int temp=0;//临时变量
boolean qq=false; //标记变量,表示是否进行过交换
for (int j = 0; j <arr.length-1 ; j++) {
for (int i = 0; i <arr.length-1-j ; i++) {
//如果前面的数比后面的数大,则交换
if(arr[i]>arr[i+1]){
qq=true;
temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
System.out.println("第"+(j+1)+"趟排序之后:");
System.out.println(Arrays.toString(arr));
if(!qq){
break;
}else {
qq=false;
}
}
}
}
代码运行效果如下: