您的位置 首页 java

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

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));
    }

  

Java

Copy

输出如下:

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

三、代码优化

通过上面的代码我们可以看到一共进行了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));
    }

  

Java

Copy

输出如下:

文章来源:智云一二三科技

文章标题:一起学排序算法 – 冒泡排序

文章地址:https://www.zhihuclub.com/179076.shtml

关于作者: 智云科技

热门文章

网站地图