<返回更多

一起学排序算法 - 冒泡排序

2021-12-15  晓掌柜丶韶华  
加入收藏

一、什么是冒泡排序

1.1、文字描述

冒泡排序是一种简单的排序算法。它重复地走访要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,这也就说明排序已经完成。因为越大的元素会经由交换慢慢‘浮‘到数列的顶端,所以命名为冒泡算法排序。

1.2、程序描述

定义一个变量 i = 0,最大值为数列的长度 - 1 , i 与 i + 1 进行比较,如果 i > i + 1 则进行交换。随着 i 的不断增加,直到 i 达到数列长度 - 1。

附动态图:

一起学排序算法 - 冒泡排序

 

二、简单的代码展示

我们先进行最基础的操作,再依次进行比对。

PS: 这样会产生一些无效的操作,后面我们再进行优化...

    
    public static void main(String[] args) {

        int handleTimes = 0;
        /* 定义一个简单的乱序数组 */
        int[] intArr = {2,4,1,5,6,3,7};
        for (int i = 0;i < intArr.length; i++) {
            /* 开启双重循环 */
            for (int j = 0; j < intArr.length - i - 1; j++) {
                /* 拿到当前操作的数据和下一个进行比较 */
                if (intArr[j] > intArr[j + 1]) {
                    /* 我们按照从小到大排序,如果当前的大于下一个数据则两个数据互换 */
                    int temp = intArr[j];
                    intArr[j] = intArr[j+1];
                    intArr[j+1] = temp;
                }
            }
            System.out.println("第" + handleTimes + "次排序" + CollectionUtils.arrayToList(intArr));
            handleTimes++;
        }
        System.out.println(handleTimes);
        System.out.println(CollectionUtils.arrayToList(intArr));
    }

输出如下:

一起学排序算法 - 冒泡排序

 

三、代码优化

通过上面的代码我们可以看到一共进行了7次排序,但是从第四次开始已经是完成了的,后面的都是无效操作。所以我们对代码进行了如下优化:

① 定义一个排序生效字段 isChanged,当排序进行时我们使其修改为true

② 每次大循环时我们都初始isChengerd为false,当每次大循环结束时,如果isChanged还是false,则进行已经没有进行排序了


    public static void main(String[] args) {

        int handleTimes = 0;
        boolean isChangerd = false;
        /* 定义一个简单的乱序数组 */
        int[] intArr = {2,4,1,5,6,3,7};
        for (int i = 0;i < intArr.length; i++) {
            isChangerd = false;
            /* 开启双重循环 */
            for (int j = 0; j < intArr.length - i - 1; j++) {
                /* 拿到当前操作的数据和下一个进行比较 */
                if (intArr[j] > intArr[j + 1]) {
                    /* 我们按照从小到大排序,如果当前的大于下一个数据则两个数据互换 */
                    int temp = intArr[j];
                    intArr[j] = intArr[j+1];
                    intArr[j+1] = temp;
                    /* 这里定义一个中间变量进行操作 */
                    isChangerd = true;
                }
            }
            System.out.println("第" + handleTimes + "次排序" + CollectionUtils.arrayToList(intArr));
            /* 如果这里如果上面的操作没有交换则说明排序已经完成 */
            if (!isChangerd) {
                break;
            }
            handleTimes++;
        }
        System.out.println(CollectionUtils.arrayToList(intArr));
    }

输出如下:

一起学排序算法 - 冒泡排序

 

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>