dequanth

导航

冒泡算法的优化(一)

冒泡算法

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编辑  收藏  举报