Java基础精讲之冒泡排序(思路+代码)

冒泡排序通俗点讲就是将我们的数字一次次像泡泡一样往上冒

思路讲解:

首先我们以一个数据为例子,有一个数组,arr[2,24,13,80,75,51]。

先看第一次循环

根据第一次遍历可以看出我们找到了第一个最大的数80

在来看第二次遍历:

根据这次遍历我们又得到了第二个最大的数75,但是你们发现没有我们是不是少做了一次比较,这次我们做了4次比较。

依次执行下面直接放图片了

最后我们就得到了这个排序好的数组最后我们总结一下

代码实现:

首先我们先化繁为简,先从最简单的开始理解

简单代码实现:

 int[] arr = {2, 24, 13, 80, 75, 51};
        int temp = 0; // 我们要定义一个交换的临时变量
        for (int i = 0; i < 5; i++) {//我们第一次循环循环5次,找到最大的数字,放到数组后{2, 13, 24, 51, 75, 80}
            if (arr[i] > arr[i + 1]) {
                temp = arr[i + 1];
                arr[i + 1] = arr[i];
                arr[i] = temp;
            }
        }
        for (int i = 0; i < 4; i++) {//我们第二次循环循环4次,找到最大的数字,放到数组后{2, 13, 24, 51, 75, 80}
            if (arr[i] > arr[i + 1]) {
                temp = arr[i + 1];
                arr[i + 1] = arr[i];
                arr[i] = temp;
            }
        }
        for (int i = 0; i < 3; i++) {//我们第三次循环循环3次,找到最大的数字,放到数组后{2, 13, 24, 51, 75, 80}
            if (arr[i] > arr[i + 1]) {
                temp = arr[i + 1];
                arr[i + 1] = arr[i];
                arr[i] = temp;
            }
        }
        for (int i = 0; i < 2; i++) {//我们第二次循环循环2次,找到最大的数字,放到数组后{2, 13, 24, 51, 75, 80}
            if (arr[i] > arr[i + 1]) {
                temp = arr[i + 1];
                arr[i + 1] = arr[i];
                arr[i] = temp;
            }
        }
        for (int i = 0; i < 1; i++) {//我们第一次循环循环1次,找到最大的数字,放到数组后{2, 13, 24, 51, 75, 80}
            if (arr[i] > arr[i + 1]) {
                temp = arr[i + 1];
                arr[i + 1] = arr[i];
                arr[i] = temp;
            }
        }
        for (int i=0; i<arr.length; i++){
            System.out.print("\t" + arr[i]);
        }
    }

这是简单的理解我们把每一次循环进行了拆解,形成了不是嵌套的多次for循环,跟着这段思路我们接着想,怎么可以优化代码呢,我们想我们多次for循环都是做了一件事就是if判断,然后交换,那么我可不可以进行一下嵌套循环呢,让我们的外层循环循环5次,内层循环每次相应减少是不是可以呢。

优化代码如下:

int[] arr = {2, 24, 13, 80, 75, 51};
        int temp = 0; // 我们要定义一个交换的临时变量
        for (int i = 0; i < 5; i++) {//外层循环使我们要循环的5次
            for (int j=0; j<5-i; j++){//内存循环是每一次外层循环下我要找到一个最大值,至于为甚是5-i 大家可以好好思考一下
                if (arr[j] > arr[j + 1]) {
                    temp = arr[j + 1];
                    arr[j + 1] = arr[j];
                    arr[j] = temp;
                }
            }
        }

        for (int i=0; i<arr.length; i++){
            System.out.print("\t" + arr[i]);
        }

建议:冒泡排序是一个基础的排序算法,但是时间复杂度也是很高,所以我们只需要学习他的思想即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值