Java基础数组 简单冒泡排序

1 什么是冒泡排序

  首先,我们拿到的是一个无序数组,然后,越小的元素会经过交换慢慢的 “ 浮 ” 到数列的顶端(升序或降序),就像水中的小鱼吐出的气泡最终会浮到顶端,浮出水面一样,所以叫做 “ 冒泡排序 ”。

2 怎么冒泡排序

1、思路
(1) 首先,确定从左到右是升序还是降序;
(2) 比较相邻的两个元素,是否符合升序降序的要求,符合则接着比较后面相邻的元素,不符合则交换两个元素;
(3) 对每一对元素重复上一项工作,直到排完。

2、具体实施(结合代码)
(1) 给定一个无序的数组;

int[] arr = {9,5,2,7,3,6};
bubbleSort(arr);
System.out.println(arr);

(2) 我们要构建两个循环,一个里循环一个外循环,外循环控制第几轮的循环,内层控制当前一轮循环中两个数之间的交换。我们升序排列,所以就是越大越往右边放,小的数就会像气泡一样 " 浮 "到最左端;

// 外层循环,控制轮数
for (int bound = 0; bound <arr.length-1; bound++) {
    //里层循环,比较交换
    for (int cur = 0; cur < arr.length-1-bound; cur++) {
        if(arr[cur] > arr[cur + 1]){
            //不符合排序要求
            int tmp = arr[cur];
            arr[cur] = arr[cur + 1];
            arr[cur + 1] = tmp;
        }
    }
}

在这里插入图片描述
红色下划线标注的是交换的当前循环正在比较交换的两个数,越大越往右边移动;

在这里插入图片描述
在这里插入图片描述
  我们发现其实第三轮就已经排好了,但计算机会接着循环判断,因为计算机不能像人这样看到并且判断,不过每次循环到语句 if(arr[cur] > arr[cur + 1]) 时不符合条件就不会再交换了。
  注意 bound < arr.length - 1 ,首先它从 0 开始,所以要 < arr.length 而不是 <= ,然后因为循环到最后一次时,只剩一个数没有必要再进循环中比较,所以再 - 1 。
  注意 cur < arr.length - 1 - bound ,它 < arr.length 和 - 1 的原因同上, - bound 是因为,排序排到第几轮,就会有几个数已经到了它应在的位置,如例子中,排完第二次时,7 和 9 已经到了应到的位置。

3 完整代码

    int[] arr = {9,5,2,7,3,6};
    bubbleSort(arr);
    System.out.println(Arrays.toString(arr));

public static void bubbleSort(int[] arr) {
    //从前往后遍历
    //外层循环遍历的次数
    //已排区间[0,bound)
    //待排区间[bound,length)
    for (int bound = 0; bound <arr.length-1; bound++) {
        //里层循环,比较交换
        for (int cur = 0; cur < arr.length-1-bound; cur++) {
            if(arr[cur] > arr[cur + 1]){
                //不符合排序要求
                int tmp = arr[cur];
                arr[cur] = arr[cur + 1];
                arr[cur + 1] = tmp;
            }
        }
    }
}
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值