java冒泡法排序的算法优化
一,冒泡法优化之前
- 1.比较数组中,两个相邻的元素,如果第一个数比第二个大,我们就让它们交换位置
- 2.每一次比较,都会产生一个最大的,或者最小的数字
- 3.下一轮则可以少一次排序
- 4.依次循环,直到结束!
上代码:
import java.util.Arrays;
public class huashanzhizai {
public static void main(String[] args) {
huashanzhizai kim=new huashanzhizai();
kim.BubbleSort();
}
public void BubbleSort(){
int[] arr=new int[]{2,13,10,1,20};
System.out.println("排序前:");
System.out.println(Arrays.toString(arr));
int tmp;
for(int i=0;i<arr.length-1;i++){
for(int j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
tmp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=tmp;
}
}
System.out.println("第"+(i+1)+"次排序后:");
System.out.println(Arrays.toString(arr));
}
}
}
执行结果:
排序前:
[2, 13, 10, 1, 20]
第1次排序后:
[2, 10, 1, 13, 20]
第2次排序后:
[2, 1, 10, 13, 20]
第3次排序后:
[1, 2, 10, 13, 20]
第4次排序后:
[1, 2, 10, 13, 20]
我们发现第3次排序后结果已经出来了,但是程序会继续执行第4次。此时代码执行的效率就会降低,所以我们需要优化算法来解决。
二,冒泡法优化之后
上代码:
import java.util.Arrays;
public class huashanzhizai {
public static void main(String[] args) {
huashanzhizai kim=new huashanzhizai();
kim.Bubblesort();
}
public void Bubblesort(){
int[] arr=new int[]{2,13,10,1,20};
System.out.println("排序前:");
System.out.println(Arrays.toString(arr));
boolean flag=false;//定义一个flag
int tmp;
for(int i=0;i<arr.length-1;i++){
for(int j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
flag=true;//如果arr[j]>arr[j+1],
// 说明排序已经完成,此时就不用再下一次的循环了
tmp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=tmp;
}
}
if(!flag){
break;//在一趟排序中,一次交换都没有发生过
}else{
flag=false;//重置flag!!!进行下次循环
}
System.out.println("第"+(i+1)+"次排序后:");
System.out.println(Arrays.toString(arr));
}
}
}
执行结果:
排序前:
[2, 13, 10, 1, 20]
第1次排序后:
[2, 10, 1, 13, 20]
第2次排序后:
[2, 1, 10, 13, 20]
第3次排序后:
[1, 2, 10, 13, 20]
我们发现在第3次排序后就不再执行代码了,同时结果也正确。此时代码效率得到提高。
完!