冒泡算法记录一下

150 阅读2分钟

前言

  • 冒泡算法算是以前在学校里最早接触的算法之一了。因为简单易懂,基本上很多人都了解其基本原理。但是因为其排序方式简单粗暴,针对每个元素都依次遍历比较,所以其时间复杂度O(n^2),是一种效率低下的排序算法。
  • 这次用于记录一下对冒泡排序的基本实现和一些优化操作。

冒泡算法基础实现

  • 基础冒泡算法实现:
    /**
     * 冒泡算法 - 1
     *
     * @param args
     */
    public static void main(String[] args) {
        int[] param = {4, 3, 5, 2, 6, 1, 7, 13, 12, 8, 9, 10, 11};
		for (int i = 0; i < param.length; i++) {
            for (int j = 0; j < param.length - i - 1; j++) {
                if (param[j] > param[j + 1]) {
                    int a = param[j];
                    param[j] = param[j + 1];
                    param[j + 1] = a;
                }
            }
        }
        System.out.println(Arrays.toString(param));
    }
----------------------------
结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]

冒泡算法优化实现一

  • 针对冒泡算法优化之一:如果排序结果已经完成,比如当数组中12排序后的结果就已经是最后的结果,但是代码还会执行后面的排序,所以我们可以通过判断从而提前退出循环。
    /**
     * 冒泡算法 - 2
     *
     * @param args
     */
    public static void main(String[] args) {
        int[] param = {4, 3, 5, 2, 6, 1, 7, 13, 12, 8, 9, 10, 11};
        for (int i = 0; i < param.length; i++) {
        	boolean fal = false;
            for (int j = 0; j < param.length - i - 1; j++) {
                if (param[j] > param[j + 1]) {
                    int a = param[j];
                    param[j] = param[j + 1];
                    param[j + 1] = a;
                    fal = true;
                }
            }
            if (!fal) {
                break;
            }
        }
        System.out.println(Arrays.toString(param));
    }
----------------------------
结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]

冒泡算法优化实现二

  • 针对冒泡算法优化之一:下列数组中最后三位其实已经是排好序的结果,在整个排序流程中都不会后改动,所以可以在内部循环时获取最大的排序改变值作为下一轮的排序最大值。
/**
     * 冒泡算法 - 3
     *
     * @param args
     */
    public static void main(String[] args) {
        int[] param = {4, 3, 5, 2, 6, 1, 7, 10, 9, 8, 11, 12, 13};
        int lastSort = param.length - 1;
        for (int i = 0; i < param.length; i++) {
            int lastNum = 0;
            for (int j = 0; j < lastSort; j++) {
                if (param[j] > param[j + 1]) {
                    int a = param[j];
                    param[j] = param[j + 1] ;
                    param[j + 1] = a;
                    lastNum = j;
                }
            }
            lastSort = lastNum;
        }
        System.out.println(Arrays.toString(param));
    }