冒泡算法的优化(一)
冒泡算法
package com.java.test;
import java.util.Arrays;
//思想:
//1,逐个比较数组中两个相邻的元素大小,如果大小与预期不一致,则交换两者的位置。
//2,没完成一轮比较,就是产生一个最大值或者最小值。
//3,下一轮比较则可以少进行一次。
public class MaoPao {
public static void main(String[] args) {
int[] arr1 = {87,32,52,6,31,88,443,1356,22,1};
System.out.println(Arrays.toString(arr1));
Ordering(arr1);
System.out.println(Arrays.toString(arr1));
}
public static void Ordering(int[] arr){ //数组的引用,改变了原数组的值!
for (int j = 0; j < arr.length; j++) {
for (int i = 0; i < arr.length-1-j; i++) {
int temp=0;
if(arr[i]>arr[i+1]){
temp = arr[i+1];
arr[i+1]=arr[i];
arr[i]=temp;
}
}
}
}
}
优化方案:增加判定机制,如果在一次轮询中一次交换也没有进行,则提前中断轮询
package com.java.test;
import java.util.Arrays;
public class MaoPao {
public static void main(String[] args) {
int[] arr1 = {1,2,3,4,5,6,7,8,9,10};
System.out.println(Arrays.toString(arr1));
Ordering(arr1);
System.out.println(Arrays.toString(arr1));
}
public static void Ordering(int[] arr){
for (int j = 0; j < arr.length; j++) {
boolean flag = true; //交换标识
for (int i = 0; i < arr.length-1-j; i++) {
int temp=0;
if(arr[i]>arr[i+1]){
temp = arr[i+1];
arr[i+1]=arr[i];
arr[i]=temp;
flag = false;
}
}
if(flag){
System.out.println("排序终止,共轮询了"+(j+1)+"次");
break;
}
}
}
}
posted on 2022-09-15 18:58 dequantianhe 阅读(144) 评论(0) 编辑 收藏 举报