码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 冒泡排序和数据结构和算法可视化网站(及其一点小优化)


    目录

    一、冒泡排序的原理

    二、动图演示原理

     三、代码实现:

    四、优化后的冒泡排序

    五、算法演示网站


    一、冒泡排序的原理

    冒泡排序就是两两交换,第一趟排序可以得到最大值,那么第二趟排序就不用再比较最大值了,同样是两两交换,找出第二大的值。然后经过n-1次趟的两两比较之后就可以排序完毕了。

    比如说现有数组{4,5,7,9,6,3,1,2,1,8},那么冒泡排序的意思就是

    第一趟排序就是现比较4,5,4<5不互换位置,5<7,也不互换位置,7<9,也不用互换位置,9>6,此时6和9互换位置,以此类推,接下来的数字都比9小,都得和9互换位置,总共比较9次,也就是n-1次得出第一趟排序之后的结果就是

    4576312189

    第二趟排序,由于已经知道最大值了,所以总共比较n-2次即可,得出以下结果:

    4563121789

    二、动图演示原理

    下面就不一一列举了,给一个更加形象生动的图演示一下:

     三、代码实现:

    1. public static int[] BS(int [] array){
    2. int temp;
    3. for(int i = 0;i1;i++){
    4. for(int j = 0;j1-i;j++){
    5. if(array[j]>array[j+1]){
    6. temp = array[j];
    7. array[j] = array[j+1];
    8. array[j+1] = temp;
    9. }
    10. }
    11. }
    12. return array;
    13. }

    四、优化后的冒泡排序

    好了,那现在我们已经知道原理了,能不能做出一点小优化呢,答案是肯定可以的,因为比如说,第一层循环已经固定是length-1次,但是现实生活中有可能不需要排那么多次,在其中排序的过程中就可能已经排好了,此时我们要做的就是消除第一层不必要的排序了。那么我们可以根据if语句是否执行可以判断数组是否已经排好序了,因为如果不执行if语句的话,那肯定是排好序的了,所以此时我们可以在第一层循环里面定义一个标志变量,如果进入if语句就改变该标志变量,第二层循环执行完之后,再判断该标志是否已经被发生变化,如果没有变化,那么就说明已经排好序了,就可以结束循环了。否则,继续进行冒泡排序。

    优化后的代码:

    1. public static int[] A_BS(int [] array){
    2. int temp;
    3. for(int i = 0;i1;i++){
    4. boolean flag = true;
    5. for(int j = 0;j1-i;j++){
    6. if(array[j]>array[j+1]){
    7. temp = array[j];
    8. array[j] = array[j+1];
    9. array[j+1] = temp;
    10. flag = false;
    11. }
    12. }
    13. if(flag){
    14. break;
    15. }
    16. }
    17. return array;
    18. }

    五、算法演示网站

    这里我比较推荐数据结构和算法可视化网站:

    英文版:

    visualising data structures and algorithms through animation - VisuAlgoicon-default.png?t=M85Bhttps://visualgo.net/en中文版:

    数据结构和算法动态可视化 (Chinese) - VisuAlgoicon-default.png?t=M85Bhttps://visualgo.net/zh

    里面有很多常见的算法如上图,是一个适合刚刚学算法的小白使用。

  • 相关阅读:
    Fluent Bit组件同时搜集多种可观测性数据
    java计算机毕业设计基于node.js的电影交流观影网站
    14:00面试,14:06就出来了,问的问题有点变态。。。
    android7.1 外置SD卡三方应用没有读写权限
    Less教程及常用的操作
    自学黑客【网络安全】,一般人我劝你还是算了吧
    jq自定义插件--选项卡
    Charles-ios无法抓包原因之一证书
    pycharm安装(windows)
    docker镜像构建
  • 原文地址:https://blog.csdn.net/qq_53317005/article/details/127910935
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号