JAVA-冒泡排序算法

冒泡排序就像鱼吐泡泡一样,最大的泡泡会到最上面的位置,最小的泡泡在最下面

中心思想:

        1.从数组第一个元素开始往后逐一比较,直至把本次比较序列最大的数换到数组最后一位结束

        2.每一次比较序列比上一次比较序列少一位(最后一位已经确定,无需再做比较)

    /**
     * 冒泡排序
     * 1.从数组第一位开始,如果比后面一位大就交换
     * 2.每一轮确定一个最大数交换到数组末尾,下一轮比较上一轮最大数不再参与
     * 3.直至最后一对数字比较完成确定位置
     * 中心思想是像水泡一样,最大的泡泡在最上面
     *
     * @param array
     */
    private static void bubbleSort(int[] array) {
        /*循环数组长度的次数*/
        for (int i = 0; i < array.length; i++) {
            /*从第0个元素开始,依次和后面的元素进行比较
             * j < array.length - 1 - i表示第[array.length - 1 - i]
             * 个元素已经冒泡到了合适的位置,无需进行比较,可以减少比较次数*/
            for (int j = 0; j < array.length - 1 - i; j++) {
                /*如果第j个元素比后面的第j+1元素大,交换两者的位置*/
                if (array[j + 1] < array[j]) {
                    int temp = array[j + 1];
                    array[j + 1] = array[j];
                    array[j] = temp;
                }
            }
        }
    }

优化:

        1.外层循环开始时增加交换标记:swapFlag = false

        2.内层循环如果发生交换:swapFlag = true

        3.内层循环结束后如果未发生交换,即: swapFlag ==false 时结束方法

优化后代码:

    /**
     * 冒泡排序
     * 1.从数组第一位开始,如果比后面一位大就交换
     * 2.每一轮确定一个最大数交换到数组末尾,下一轮比较上一轮最大数不再参与
     * 3.直至最后一对数字比较完成确定位置
     * 中心思想是像水泡一样,最大的泡泡在最上面
     *
     * @param array
     */
    private static void bubbleSort(int[] array) {
        /*循环数组长度的次数*/
        for (int i = 0; i < array.length; i++) {
            /*交换标志*/
            boolean swapFlag = false;
            /*从第0个元素开始,依次和后面的元素进行比较
             * j < array.length - 1 - i表示第[array.length - 1 - i]
             * 个元素已经冒泡到了合适的位置,无需进行比较,可以减少比较次数*/
            for (int j = 0; j < array.length - 1 - i; j++) {
                /*如果第j个元素比后面的第j+1元素大,交换两者的位置*/
                if (array[j + 1] < array[j]) {
                    int temp = array[j + 1];
                    array[j + 1] = array[j];
                    array[j] = temp;
                    swapFlag = true;
                }
            }
            /*一轮冒泡结束未发生交换,表明数组排序已经完成,直接结束*/
            if (!swapFlag) {
                return;
            }
        }
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值