如果我们发现在某趟排序中没有发现交换

    那么我们就可以结束排序,即优化一下算法

    加上一个flag变量,用于标识

    1. // 将前面额冒泡排序算法,封装成一个方法
    2. public static void bubbleSort(int[] arr) {
    3. // 冒泡排序 的时间复杂度 O(n^2), 自己写出
    4. int temp = 0; // 临时变量
    5. boolean flag = false; // 标识变量,表示是否进行过交换
    6. for (int i = 0; i < arr.length - 1; i++) {
    7. for (int j = 0; j < arr.length - 1 - i; j++) {
    8. // 如果前面的数比后面的数大,则交换
    9. if (arr[j] > arr[j + 1]) {
    10. flag = true;
    11. temp = arr[j];
    12. arr[j] = arr[j + 1];
    13. arr[j + 1] = temp;
    14. }
    15. }
    16. //System.out.println("第" + (i + 1) + "趟排序后的数组");
    17. //System.out.println(Arrays.toString(arr));
    18. if (!flag) { // 在一趟排序中,一次交换都没有发生过
    19. break;
    20. } else {
    21. flag = false; // 重置flag!!!, 进行下次判断
    22. }
    23. }
    24. }

    卧槽还有细节

    冒泡排序:发现逆序就交换