冒泡排序算法 Java

冒泡排序

        冒泡排序发是把N个数通过 N - 1 轮排序,升序排序中大的数往下沉,小的数往上浮。每一轮比较会把最大的数下沉到最底,所以相互比较的次数每一轮都会比前一轮少一次。

冒泡排序代码实现:

import java.util.Arrays;

public class BubbleSort {

    public static void main(String[] args) {

        int[] nums = new int[]{9, 5, 3, 4, 10, 6, 2, 7, 8, 1};

        System.out.println("排序前:" + Arrays.toString(nums));
        nums = sort(nums);
        System.out.println("排序后:" + Arrays.toString(nums));
    }

    public static int[] sort(int[] nums){

        int n = nums.length;

        for (int i = 0;i < n - 1;i++){  // n-1次 (第n次不用比较)
            for (int j = 0;j < n - 1 - i;j++){  // n-1-i次 每一轮都比上一次少比较一次
                if (nums[j] > nums[j + 1]){     // 比较大小
                    int tmp = nums[j];          // 互换位置
                    nums[j] = nums[j + 1];
                    nums[j + 1] = tmp;
                }
            }
        }

        return nums;
    }
}

 优化:添加一个 flag 表示每一轮是否交换的标志,每轮的开始设置为 false,若本轮有交换过位置则修改 flag true,若本轮 flag 还是等于 false 说明没有进行交换,数组已经有序了,跳出循环。

import java.util.Arrays;

public class BubbleSort {

    public static void main(String[] args) {

        int[] nums = new int[]{9, 5, 3, 4, 10, 6, 2, 7, 8, 1};

        System.out.println("排序前:" + Arrays.toString(nums));
        nums = sort(nums);
        System.out.println("排序后:" + Arrays.toString(nums));
    }

    public static int[] sort(int[] nums){

        boolean flag;   // 是否交换的标志
        int n = nums.length;

        for (int i = 0;i < n - 1;i++){  // n-1次 (第n次不用比较)
            flag = false;
            for (int j = 0;j < n - 1 - i;j++){  // n-1-i次 每一轮都比上一次少比较一次
                if (nums[j] > nums[j + 1]){     // 比较大小
                    int tmp = nums[j];          // 互换位置
                    nums[j] = nums[j + 1];
                    nums[j + 1] = tmp;
                    flag = true;                // 只要有发生交换就改为true
                }
            }
            if (!flag)  // 若为false说明已经有序了,跳出循环
                break;
        }

        return nums;
    }
}

用一个基本有序的数组查看优化前后的比较次数,明显优化后的比较次数少了不少。

 优化前:

优化后:

猜你喜欢

转载自blog.csdn.net/qq_43833393/article/details/127340823