• 冒泡排序——高淇JAVA300讲笔记之冒泡排序


      冒泡排序可以简单用一句话来概括:有n个数就总共要排(n-1)趟,每趟要排(n-i-1)次。

      裴新老师还做了优化,减少趟数。原理是:如果进行某趟排序时一次元素交换都没有发生,就说明该数组已经是有序的了,这时候就可以break跳出循环,不用进行下一趟了。

     1 package com.bjsxt.sort.bubble;
     2 
     3 import java.util.Arrays;
     4 
     5 /**
     6  * 考虑存在顺序,减少趟数
     7  *
     8  */
     9 public class BubbleSort {
    10     public static void main(String[] args) {
    11         int[] arr = {9,1,2,3,4};
    12         sort1(arr);
    13         
    14         System.out.println("===========================");
    15         arr = new int[] {1,2,9,3,4};
    16         sortFinal(arr);
    17     }
    18     
    19     public static void sortFinal(int[] arr) {
    20         boolean sorted = true;
    21         int len = arr.length;
    22         for(int j=0;j<len-1;j++) {  //趟数
    23             sorted = true;  //假定有序
    24             System.out.println("第" + (j+1) + "趟");
    25             for(int i=0;i<arr.length-1-j;i++) {  //次数
    26                 System.out.print("第" + (i+1) + "次");
    27                 if(arr[i]>arr[i+1]) {
    28                     int temp = arr[i];
    29                     arr[i] = arr[i+1];
    30                     arr[i+1] = temp;
    31                     sorted = false;  //假定失败
    32                 }
    33                 System.out.println(Arrays.toString(arr));
    34             }
    35             if(sorted) {
    36                 break;
    37             }
    38         }
    39     }
    40     
    41     public static void sort1(int[] arr) {
    42         int len = arr.length;
    43         for(int j=0;j<len-1;j++) {  //趟数
    44             System.out.println("第" + (j+1) + "趟");
    45             for(int i=0;i<arr.length-1-j;i++) {  //次数
    46                 System.out.print("第" + (i+1) + "次");
    47                 if(arr[i]>arr[i+1]) {
    48                     int temp = arr[i];
    49                     arr[i] = arr[i+1];
    50                     arr[i+1] = temp;
    51                 }
    52                 System.out.println(Arrays.toString(arr));
    53             }
    54         }
    55     }
    56     
    57 }

    输出结果是:

    第1趟
    第1次[1, 9, 2, 3, 4]
    第2次[1, 2, 9, 3, 4]
    第3次[1, 2, 3, 9, 4]
    第4次[1, 2, 3, 4, 9]
    第2趟
    第1次[1, 2, 3, 4, 9]
    第2次[1, 2, 3, 4, 9]
    第3次[1, 2, 3, 4, 9]
    第3趟
    第1次[1, 2, 3, 4, 9]
    第2次[1, 2, 3, 4, 9]
    第4趟
    第1次[1, 2, 3, 4, 9]
    ===========================
    第1趟
    第1次[1, 2, 9, 3, 4]
    第2次[1, 2, 9, 3, 4]
    第3次[1, 2, 3, 9, 4]
    第4次[1, 2, 3, 4, 9]
    第2趟
    第1次[1, 2, 3, 4, 9]
    第2次[1, 2, 3, 4, 9]
    第3次[1, 2, 3, 4, 9]

    可以看到,优化过的方法里只排了2趟。

  • 相关阅读:
    算法导论:堆排序
    地域划分
    字符串翻转
    lintcode:买卖股票的最佳时机 IV
    lintcode:买卖股票的最佳时机 III
    lintcode:买卖股票的最佳时机 II
    lintcode:买卖股票的最佳时机 I
    2016腾讯编程题:微信红包
    2016腾讯编程题:生成格雷码
    2016京东编程题:小东分苹果
  • 原文地址:https://www.cnblogs.com/swimminglover/p/8321634.html
Copyright © 2020-2023  润新知