public class Demo {
public static void main(String[]args){
int[] array = new int[]{5,8,6,3,9,2,1,7};
int[] test = new int[]{3,4,2,1,5,6,7,8};
//aa(array);
bb(test);
System.out.println(Arrays.toString(test));
}
public static void test(int []array){
int temp=0;
for(int i=0;i<array.length;i++){
for(int j=0;j<array.length-i-1;j++){
if(array[j]>array[j+1]){
temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
}
}
//冒泡排序第二版
public static void aa(int []array){
int temp=0;
int s=0;
for(int i=0;i<array.length;i++){
boolean is=true;
for(int j=0;j<array.length-i-1;j++){
if(array[j]>array[j+1]){
temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
is=false;
}
}
if(is){
break;
}else{
s++;
}
}
System.out.println(""+s);
}
//冒泡排序第三版
public static void bb(int[] array){
int temp=0;
//记录最后一次交换的位置
int lastExchangeIndex = 0;
//无序数列的边界,每次比较只需要比到这里为止
int sortBorder = array.length - 1;
//用来统计外层循环几次
int sum=0;
for(int i=0;i<array.length;i++){
//有序标记,每一轮的初始是true
boolean isSorted = true;
//用来统计每次内层循环比较的次数
int num=0;
for(int j=0;j<sortBorder;j++){
if(array[j]>array[j+1]){
temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
//有元素交换,所以不是有序,标记变为false
isSorted=false;
//把无序数列的边界更新为最后一次交换元素的位置
lastExchangeIndex = j;
num++;
}
}
System.out.println(""+num);
sortBorder = lastExchangeIndex;
if(isSorted){
break;
}else {
sum++;
}
}
System.out.println(""+sum);
}
}
浅谈冒泡排序及其优化
最新推荐文章于 2020-11-23 10:39:21 发布