关于冒泡排序的补充

开始今天的复习!

昨天晚上想了一个问题:冒泡排序方法是不是可以带返回值类型呢?

考试的时候是那样写了,但是没有写好,回头翻了笔记,发现是可以的。

敲个代码来加深下印象:

/**
 * @Date: 2019-11-24 08:40
 * @King: No blood!No bone!No ash!!!
 */
public class TestBubbleSortIII {
  public static void main(String[] args) {
    /**
     * 定义一个数组
     */
    int [] array = {12,21,16,5,36,22,2,9,66};
    /**
     * 先输出排序前的样子,练习下for循环遍历数组
     */
    System.out.println("排序前:");
    for (int i = 0;i < array.length;i++) {
      System.out.print(array[i] + "  ");
    }
    System.out.println();
    /**
     * 调用排序方法
     */
    bubbleSort(array);
    /**
     * 练习下for-each循环遍历数组
     */
    System.out.println("排序后:");
    for (int i : array) {
      System.out.print(i + "  ");
    }
  }

  /**
   * 带返回值类型的冒泡排序
   */
  public static int [] bubbleSort (int [] array) {
    /**
     * 外层for循环--排序趟数
     */
    for (int i = 0;i < array.length;i++) {
      /**
       * 定义一个标识,判断排序过程是否发生元素交换位置,默认false代表没有交换
       * (一开始自己觉得默认false代表数组无序,到后面判断时思维会混乱)
       */
      boolean flag = false;
      /**
       * 内层循环比较相邻元素的大小,前者大于后者则交换位置
       * 每比较一趟,i + 1,j - 1,j与i的关系可以用j <array.length - 1 - i表示
       */
      for (int j = 0;j <array.length - 1 - i;j++) {
        if (array[j] > array[j + 1]) {
          int temp = array[j + 1];
          array[j + 1] = array[j];
          array[j] = temp;
          flag = true;
        }
      }
      /**
       * 一趟循环下来数组中未发生元素交换位置--数组已经有序,结束循环
       */
      if (!flag) {
        break;
      }
    }
    return array;
  }
}

输出结果:

排序前:
12 21 16 5 36 22 2 9 66
排序后:
2 5 9 12 16 21 22 36 66

总结:思维要活,也要经得住验证。

posted @ 2019-11-24 09:06  我有两个皮夹克  阅读(135)  评论(0编辑  收藏  举报