import java.util.Arrays;
/**
* 冒泡排序的改进
* @author 13983
*
*/
public class Mao {
public static void main(String[] args) {
int[] list1=new int[]{2,1,3,4,5,6,7,8,9};
int[] list2=new int[]{2,1,3,4,5,6,7,8,9};
//使用传统的冒泡排序
oldSort(list1);
System.out.println(Arrays.toString(list1));
//使用改进的冒泡排序
newSort(list2);
System.out.println(Arrays.toString(list2));
}
/*
* 传统排序的弊端:像对上面的数据进行排序{2,1,3,4,5,6,7,8,9},
* 在将1和2进行交换后数据已经是有序的了,所以后面的循环是在做无用功
*/
private static void oldSort(int[] list) {
int count=0;
for(int i=0;i<list.length;i++){
for(int j=0;j<list.length-i-1;j++){
if(list[j]>list[j+1]){
swap(list,j,j+1);
}
count++;
}
}
System.out.println("传统冒泡比较的次数:"+count);
}
private static void newSort(int[] list) {
int count=0;
boolean flag=true; //是否有序标志
for(int i=0;i<list.length&&flag==true;i++){
for(int j=0;j<list.length-i-1;j++){
flag=false;
if(list[j]>list[j+1]){
swap(list,j,j+1);
flag=true;
}
count++;
}
}
System.out.println("改进冒泡比较的次数:"+count);
}
private static void swap(int[] list, int m, int n) {
int temp=0;
temp=list[m];
list[m]=list[n];
list[n]=temp;
}
}
结果展示: