冒泡排序

1.序言:

好久没写博文了。换了一家公司。工作地点也从苏州变成了北京。由于工作需要,从以前的纯上层APP,渐渐变成了一个,为算法写Demo的程序员。工作两年了,眼光也突然改变了。以前总是想学习新的技术,Kotlin,快应用,微信小程序,什么技术新颖就对什么感兴趣。但是到了新的公司后RxJava+Retrofit+MVP的模式从来没用过。取而代之的时OpenGL,坐标转换,JNI。突然觉得自己除了用别人写好的框架以外,什么都不会。技术总是在更新的,语言也可以改变,框架和库也会变,但是总有些不变的东西,比如说数据结构和算法,所以我想在空闲之余。在从新总结一下这方面的东西。

2.原理

冒泡排序是特别经典的排序之一,他的时间复杂度是O(N²)。
排序的思路是:排序时分成两层循环,内循环控制“冒泡”,外循环控制,内循环次数。内循环每次都会将两个数进行比较,如果前者大于后者就将两个数进行交换。直到该内循环结束为止。 每执行一次内循环都会将一个最大的数排序到最后。内循环执行次数由外循环控制。

3.注意

光看文字的话,可能有点懵了。下面直接上代码。代码上有注释。每层内循环和外循环,都打上了Log日志。

    /**
     * 数据交换
     * @param aar 数据源
     * @param i
     * @param j
     */
    private void swap(int[] aar, int i, int j) {
        int temp = aar[i];
        aar[i] = aar[j];
        aar[j] = temp;
    }
    /**
     * 冒泡排序
     *
     * @param aar
     */
    public void BubbleSortA(int[] aar) {
        if (aar == null || aar.length < 2)//保证aar不为null。且至少由两个数
            return;

        for (int i = 0; i < aar.length - 1; i++) {//控制总循环,进行n-1次循环
            KLog.e("test外部:"+i);
            boolean flag = true;//开关,若内层循环没有进行过交换,说明已经排好序了。无需在往下进行。
            for (int j = 0; j < aar.length - i - 1; j++) {//内层循环,每次都从0开始。循环次数,慢慢减少。最大的数放到最后面
                if (aar[j] > aar[j + 1]) {
                    swap(aar, j, j + 1);
                    flag = false;
                    KLog.e("test:"+j);
                }
            }
            if (flag) {//跳出循环
                break;
            }
        }
    }
bubbleSortA.gif
    /**
     * 冒泡排序
     * @param aar
     */
    public void BubbleSortB(int[] aar) {
        if (aar == null || aar.length < 2) {
            return;
        }

        for (int end = aar.length - 1; end > 0; end--) {//进行n-1次循环
            boolean flag=true;//设置标记位
            KLog.e("test外部:"+end);
            for (int i = 0; i < end; i++) {//内部循环,从0开始,每次循环次数都减少。最大的数,冒泡到最后面。
                if (aar[i]>aar[i+1]){
                    swap(aar,i,i+1);
                    flag=false;
                    KLog.e("test内部:"+i);
                }
            }

            if (flag){
                break;
            }
        }
    }
bubbleSortB.gif

4.

如果觉得本文能够帮助您的,帮忙点个赞。你的赞就是我最大的动力。希望大家都能打牢地基。这既是你的地基也是你的天花板。切记,只看不敲都是徒劳。帮忙点赞,谢谢亲。如有错误,请纠正。望你我共同进步!在这个互联网寒冬中,进一步提高自己的价值!

你可能感兴趣的:(冒泡排序)