5.1拓展冒泡排序(选讲)

冒泡排序

请添加图片描述

冒泡排序的动态演示

比较相邻的元素。

1,如果第一个比第二个大(升序),就交换他们两个。
2,对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,
最后的元素会是最大的数。
3. 针对所有的元素重复以上的步骤,除了最后一个。
4, 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较为
止。

冒泡排序动态演示的网址:https://www.bilibili.com/video/BV1qY4y1h7Lz/

2 排序思路
先给大家放几张图,让大家感受下冒泡排序是怎么排序的:
比如我现在有一组乱序的数据:
11 9 13 6 8 5,希望通过冒泡排序后得到从小到大按顺序排列的数据
首先开始第1轮的第1次比较:11与9进行比较,11>9,所以互换位置:
在这里插入图片描述

这是11与9互换位置后的结果,红线标注的就是当前正在比较的两个数据:

在这里插入图片描述

第1轮的第2次比较:11与13进行比较,11<13,符合顺序,无需互换位置:

在这里插入图片描述

第1轮的第3次比较:6与13进行比较,13>6,不符合顺序,这是互换位置后的结果:

在这里插入图片描述

第1轮的第4次比较:8与13进行比较,13>8,不符合顺序,这是互换位置后的结果:

在这里插入图片描述

第1轮的第5次比较:5与13进行比较,13>5,不符合顺序,这是互换位置后的结果:
目前第一轮所有元素都参与了比较,结果:9 11 6 8 5 13

在这里插入图片描述

第2轮的第1次比较:9与11进行比较,9<11,符合顺序,无需互换位置:

在这里插入图片描述

第2轮的第2次比较:11与6进行比较,11>6,不符合顺序,这是互换位置后的结果:

在这里插入图片描述

第2轮的第3次比较:11与8进行比较,11>8,不符合顺序,这是互换位置后的结果:

在这里插入图片描述

第2轮的第4次比较:11与5进行比较,11>5,不符合顺序,这是互换位置后的结果:
第二轮结果:9 6 8 5 11 13

在这里插入图片描述

第3轮的第1次比较:9与6进行比较,9>6,不符合顺序,这是互换位置后的结果:

在这里插入图片描述

第3轮的第2次比较:9与8进行比较,9>8,不符合顺序,这是互换位置后的结果:

在这里插入图片描述

第3轮的第3次比较:9与5进行比较,9>5,不符合顺序,这是互换位置后的结果:
第三轮结果:6 8 5 9 11 13

在这里插入图片描述

第4轮的第1次比较:6与8进行比较,6<8,符合顺序,无需互换位置:

在这里插入图片描述

第4轮的第2次比较:5与8进行比较,8>5,不符合顺序,这是互换位置后的结果:
第四轮结果:6 5 8 9 11 13

在这里插入图片描述

第5轮的第1次比较:6与5进行比较,6>5,不符合顺序,这是互换位置后的结果:

在这里插入图片描述

第五轮结果:5 6 8 9 11 13,到目前为止,排序完成

冒泡排序动态演示的网址:https://www.bilibili.com/video/BV1qY4y1h7Lz/

冒泡排序的代码实现

package com.tedu;

public class TestBubbleSort {

    public static void main(String[] args) {
        int[] arr = {6,9,2,9,1};
        //目标:从小到大
        //冒泡排序的轮数 = 元素的总个数 - 1
        //轮数是多轮,每一轮比较的次数是多次,需要用到双重循环,即循环嵌套
        //外循环控制 轮数,内循环控制每一轮的比较次数和过程
        for(int i=1; i<arr.length; i++){ //循环次数是 arr.length-1 次/轮

            for(int j=0; j<arr.length-i; j++){
                //希望的是 arr[j] < arr[j+1]
                if(arr[j] > arr[j+1]){
                    //交换 arr[j]与 arr[j+1]
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                   //到这里元素的顺序已经排序完成,下一步我们通过遍历查看排序后的结果
                }
            }
        }
        //完成排序,遍历结果
        for(int i=0; i<arr.length; i++){
            System.out.print(arr[i]+" ");
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值