• 【21天学习挑战】经典算法之【冒泡排序】


    🚀个人主页:欢迎访问Ali.s的首页

    ⏰ 最近更新:2022年8月12日

    ⛽ Java框架学习系列:【Spring】【SpringMVC】【Mybatis】

    🔥 Java项目实战系列:【飞机大战】【图书管理系统】

    🍭 Java算法21天系列:【查找】【排序】【递归】

    ⛳ Java基础学习系列:【继承】【封装】【多态】

    🏆 通信仿真学习系列:【硬件】【通信】【MATLAB】

    🍄 个人简介:通信工程本硕🌈、Java程序员🚴。目前只会CURD😂

    💌 点赞 👍 收藏 💗留言 💬 都是我最大的动力💯

    在这里插入图片描述

    活动地址:CSDN21天学习挑战赛


    一、冒泡排序

    冒泡排序(Bubble Sort),是一种较简单的排序算法。它重复地走遍历要排序的元素列,依次比较两个相邻的元素,如果他们的顺序错误就把他们交换过来。遍历元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。
    在这里插入图片描述
    交换排序顾名思义就是通过元素的两两比较,判断是否符合要求,如过不符合就交换位置来达到排序的目的。冒泡排序名字的由来就是因为在交换过程中,类似水冒泡,小(大)的元素经过不断的交换由水底慢慢的浮到水的顶端。

    二、实现逻辑

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

    三、举个例子

    假设当前我们有一个数组 a,内部元素为 3,4,1,5,2,即初始状态,如下图所示。
    在这里插入图片描述进行第一遍排序,如下图所示,红色代表当前比较的元素,绿色代表已经归位的元素。

    (1)比较第一个和第二个元素,4>3,交换。

    (2)比较第二个和第三个元素,1<3,不交换。

    (3)比较第三个和第四个元素,5>1,交换。

    (4)比较第四个和第五个元素,2>1,交换。
      在这里插入图片描述
    进行第二遍排序,如下图所示,红色代表当前比较的元素,绿色代表已经归位的元素。
    (1)比较第一个和第二个元素,3<4,不交换。

    (2)比较第二个和第三个元素,5>3,交换。

    (3)比较第三个和第四个元素,2<3,不交换。
     在这里插入图片描述
    进行第三遍排序,如下图所示,红色代表当前比较的元素,绿色代表已经归位的元素。
    (1)比较第一个和第二个元素,5>4,交换。

    (2)比较第二个和第三个元素,3<4,不交换。
      在这里插入图片描述

    四、动态演示

    下面给我动态模拟效果:
    在这里插入图片描述

    五、代码实现

    public void BubbleSort(int[] array){
        for(int i=array.length-1;i>0;i--){
            boolean flag = false;
            for(int j=0;j array[j+1]){
                    int tmp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = tmp;
                    flag = true;
                }
            }
            if(!flag)
             break;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    六、算法评价

    优点:空间复杂度T=O(1)、稳定排序、在排序过程中,整个数组趋向稳定、对于已经有序的数组,排序效率高。
    缺点:效率低,时间复杂度T=O(n^2),交换次数多,交换效率低,不能并发执行。


    在这里插入图片描述

    总结

    通过对冒泡排序法进行了介绍,举出实例进行模拟整个排序过程,给出动态展示效果和Java代码,能够很好的理解冒泡排序。冒泡排序的效率过低是它存在的核心问题,后面会对其进行优化和改变。

  • 相关阅读:
    《数字图像处理-OpenCV/Python》连载(4)图像的读取与保存
    Jenkins 安装BlueOcean
    山西电力市场日前价格预测【2023-10-01】
    1135 Is It A Red-Black Tree
    多线程基础知识点梳理
    Unity使用MaskableGraphic画一条带箭头的线
    你了解TLS协议吗?
    Maven从入门到放弃-坐标和依赖详解
    Django-(4)
    探索现代办公应用系统架构:构建高效、可扩展的工作平台
  • 原文地址:https://blog.csdn.net/dxcn01/article/details/126301238