冒泡排序三种方法

  1. 冒泡排序基础用法
    1.   
      import java.util.Arrays;
      
      public class BubbleSort {
          public static void main(String[] args) {
              int[] array = new int[] {5,8,6,3,9,2,1,7};
              sort(array);
              System.out.println(Arrays.toString(array));
          }
      
          public static void sort(int array[]){
              for (int i = 0; i < array.length-1; i++) {
                  for (int j = 0; j < array.length - i - 1; j++) {
                      int tmp=0;
                      if (array[j]>array[j+1]){
                          tmp=array[j];
                          array[j]=array[j+1];
                          array[j+1]=tmp;
                      }
                  }
              }
          }
      
      }
  2. 冒泡排序优化第二版
    1.   与第一版代码相比,第二版代码做了小小的改动,利用一个Boolean作为标记。如果在本轮排序中,元素有交换,则说明数列无序;如果没有元素交换,则说明数列已经有序,然后直接跳出大循环。
    2. import java.util.Arrays;
      
      public class GoodBubbleSort {
          public static void main(String[] args) {
              int[] array = new int[]{5, 8, 6, 3, 9, 2, 1, 7};
              sort(array);
              System.out.println(Arrays.toString(array));
          }
      
          public static void sort(int array[]) {
              for (int i = 0; i < array.length - 1; i++) {
      //            有序标记,每一轮的初始值都是true
                  boolean isSorted = true;
                  for (int j = 0; j < array.length - i - 1; j++) {
                      int tmp=0;
                      if (array[j]>array[j+1]){
                          tmp=array[j];
                          array[j]=array[j+1];
                          array[j+1]=tmp;
      //                    因为有元素交换,所以不是有序的,标记为false
                          isSorted=false;
                      }
                  }
                  if (isSorted){
                      break;
                  }
              }
          }
      }
  3. 冒泡排序优化第三版
    1.   在第三版代码中,sortBorder就是无序数列的边界。在每一轮排序过程中,处于sortBorder之后的元素就不需要再进行比较了,肯定是有序的
    2. import java.util.Arrays;
      
      public class BestBubbleSort {
          public static void main(String[] args) {
              int[] array = new int[]{5, 8, 6, 3, 9, 2, 1, 7};
              sort(array);
              System.out.println(Arrays.toString(array));
          }
      
          public static void sort(int array[]) {
              for (int i = 0; i < array.length - 1; i++) {
      //            有序标记,每一轮的初始值都是true
                  boolean isSorted = true;
      //            无序数列的边界,每次比较只需要比到这里为止
                  int sortBorder = array.length - 1;
                  for (int j = 0; j < sortBorder; j++) {
                      int tmp = 0;
                      if (array[j] > array[j + 1]) {
                          tmp = array[j];
                          array[j] = array[j + 1];
                          array[j + 1] = tmp;
                          isSorted = false;
                      }
                  }
                  if (isSorted) {
                      break;
                  }
              }
          }
      }

猜你喜欢

转载自www.cnblogs.com/xnuuuu/p/12114715.html