首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >_冒泡排序和数据结构和算法可视化网站(及其一点小优化)

_冒泡排序和数据结构和算法可视化网站(及其一点小优化)

原创
作者头像
会洗碗的CV工程师
修改于 2023-11-24 14:53:12
修改于 2023-11-24 14:53:12
17400
代码可运行
举报
文章被收录于专栏:LongJava学习资料LongJava学习资料
运行总次数:0
代码可运行

一、冒泡排序的原理

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法

它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行,直到没有相邻元素需要交换,也就是说该元素列已经排序完成。

这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

冒泡排序算法的原理如下:

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

冒泡排序就是两两交换,第一趟排序可以得到最大值,那么第二趟排序就不用再比较最大值了,同样是两两交换,找出第二大的值。然后经过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次得出第一趟排序之后的结果就是

4

5

7

6

3

1

2

1

8

9

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

4

5

6

3

1

2

1

7

8

9

二、动图演示原理

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

添加描述

 三、代码实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public static int[] BS(int [] array){
        int temp;
        for(int i = 0;i<array.length-1;i++){
            for(int j = 0;j<array.length-1-i;j++){
                if(array[j]>array[j+1]){
                    temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                }
            }
        }
        return array;
    }

四、优化后的冒泡排序

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

优化后的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public static int[] A_BS(int [] array){
        int temp;
        for(int i = 0;i<array.length-1;i++){
            boolean flag = true;
            for(int j = 0;j<array.length-1-i;j++){
                if(array[j]>array[j+1]){
                    temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                    flag = false;
                }
            }
            if(flag){
                break;
            }
        }
        return array;
    }

五、算法演示网站

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

英文版:

visualising data structures and algorithms through animation - VisuAlgo

https://visualgo.net/en中文版:

数据结构和算法动态可视化 (Chinese) - VisuAlgo

https://visualgo.net/zh

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

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
冒泡排序和数据结构和算法可视化网站(及其一点小优化)
冒泡排序就是两两交换,第一趟排序可以得到最大值,那么第二趟排序就不用再比较最大值了,同样是两两交换,找出第二大的值。然后经过n-1次趟的两两比较之后就可以排序完毕了。
会洗碗的CV工程师
2022/11/29
7400
冒泡排序和数据结构和算法可视化网站(及其一点小优化)
python算法与数据结构-冒泡排序(32)
  冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
Se7eN_HOU
2019/06/26
4990
python算法与数据结构-冒泡排序(32)
数据结构算法--2 冒泡排序,选择排序,插入排序
思想就是将相邻元素两两比较,当一个元素大于右侧相邻元素时,交换他们的位置,小于右侧元素时,位置不变,最终序列中的最大元素,像气泡一样,到了最右侧。
@小森
2024/03/15
1190
数据结构算法--2 冒泡排序,选择排序,插入排序
数据结构与算法——冒泡排序
第一趟排序后,最后一项已经是最大值,第二趟排序时只需要对前n-1项进行排序,得到arr数组中的数据顺序为 arr={5,4,8,3,9,10 }
C you again 的博客
2020/09/15
4110
必须掌握的八种排序(5-6)--冒泡排序,快速排序
5、冒泡排序 (1)基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排
汤高
2018/01/11
7690
必须掌握的八种排序(5-6)--冒泡排序,快速排序
Go 数据结构和算法篇(四):冒泡排序
今天学院君要给大家介绍的是基于选择的排序算法,常见基于选择的排序算法有冒泡排序、插入排序、选择排序、归并排序和快速排序,我们在选择排序算法的时候,通常会根据以下几个维度来考虑:
学院君
2023/03/03
2630
Go 数据结构和算法篇(四):冒泡排序
【C语言】拿捏冒泡排序(图解)
冒泡排序:它重复地走访要排序的数列,一次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来。重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 下面是冒泡排序的步骤:
学习起来吧
2024/02/29
1620
【C语言】拿捏冒泡排序(图解)
十大排序算法详解(一)冒泡排序、选择排序、插入排序、快速排序、希尔排序[通俗易懂]
  冒泡排序是比较基础的排序算法之一,其思想是相邻的元素两两比较,较大的数下沉,较小的数冒起来,这样一趟比较下来,最大(小)值就会排列在一端。整个过程如同气泡冒起,因此被称作冒泡排序。   冒泡排序的步骤是比较固定的:
全栈程序员站长
2022/09/14
8740
十大排序算法详解(一)冒泡排序、选择排序、插入排序、快速排序、希尔排序[通俗易懂]
冒泡排序
冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),一次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前向后移动,就像水滴下的气泡逐渐上升。
JusterZhu
2022/12/07
1590
冒泡排序
冒泡排序-Java版
外层循环是循环数组中所有数据,内层循环是进行比较的。所以外层循环的长度是:array.length-1
凯哥Java
2022/12/16
4480
冒泡排序-Java版
【数据结构】排序算法---冒泡排序(动图演示)
冒泡排序(英语:Bubble sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
Crossoads
2024/10/22
5200
【数据结构】排序算法---冒泡排序(动图演示)
【数据结构】——排序之冒泡排序
冒泡函数的核心思想就是:两两相邻的元素进行比较,一轮下来最大的或者最小的就会被交换到最后面,每一轮都得到该轮的最值排到后面,如果是升序就得到最大值,降序就是最小值,排n轮直到有序。
大耳朵土土垚
2024/03/24
1860
【数据结构】——排序之冒泡排序
那些年,让我面试头大的几个排序算法,今天终于搞懂了!
算法上,最基础的就是排序算法,几乎在面试中,或多或少会要求你手写一些基础算法。今天鱼哥带大家这些基础算法回顾下。
AI科技大本营
2019/05/22
3870
排序算法总结
概述  本文对比较常用且比较高效的排序算法进行了总结和解析,并贴出了比较精简的实现代码,包括选择排序、插入排序、归并排序、希尔排序、快速排序等。算法性能比较如下图所示: 选择排序 种最简单的排序算
Kevin_Zhang
2018/07/05
7530
JS手撕(十) 冒泡排序、插入排序
冒泡排序原理就是依次比较相邻元素,如果前面的比后面的大,那就互换位置。从第一对比到最后一对。第一轮比较完最大的数就会浮到最右边,第二轮,第二个大叔浮到倒数第二个位置……
赤蓝紫
2023/01/01
1.1K0
JS手撕(十) 冒泡排序、插入排序
冒泡排序详解_超详细电音
由上图可知,4 个石子的时候排完序需要 3 趟,第一趟需要比较3次,第二趟需要比较2次,第三趟需要比较1次,那一共比较了 3 + 2 + 1 次;
全栈程序员站长
2022/11/02
5580
冒泡排序详解_超详细电音
【数据结构】关于冒泡排序,选择排序,插入排序,希尔排序,堆排序你到底了解多少???(超详解)
对于稳定性举例: 假如两个人考了一样的分数,那么先交卷的同学成绩因该排在后交卷的同学的前面,这样才符合常理逻辑。
用户11288949
2024/09/24
1520
【数据结构】关于冒泡排序,选择排序,插入排序,希尔排序,堆排序你到底了解多少???(超详解)
Java数据结构和算法(三)——冒泡、选择、插入排序算法
  上一篇博客我们实现的数组结构是无序的,也就是纯粹按照插入顺序进行排列,那么如何进行元素排序,本篇博客我们介绍几种简单的排序算法。 1、冒泡排序   这个名词的由来很好理解,一般河水中的冒泡,水底刚
IT可乐
2018/01/04
1.2K0
Java数据结构和算法(三)——冒泡、选择、插入排序算法
看动画学算法之:排序-冒泡排序
排序可能是所有的算法中最最基础和最最常用的了。排序是一个非常经典的问题,它以一定的顺序对一个数组(或一个列表)中的项进行重新排序。
程序那些事
2020/07/14
5400
看动画学算法之:排序-冒泡排序
巧借Java实现冒泡排序算法
根据之前的惯例,先来了解知识点的基本概念,根据自己对冒泡排序的理解,结合专业的解释来看,冒泡排序就是从序列中的第一个元素开始,依次对相邻的两个元素进行比较,如果前一个元素大于后一个元素则交换它们的位置;如果前一个元素小于或等于后一个元素,则不交换它们。这一比较和交换的操作,一直持续到最后一个还未排好序的元素为止。
三掌柜
2023/12/11
4422
巧借Java实现冒泡排序算法
推荐阅读
相关推荐
冒泡排序和数据结构和算法可视化网站(及其一点小优化)
更多 >
交个朋友
加入AI工作实战群
学习大模型落地案例 实操行业场景应用
加入腾讯云技术交流站
洞悉AI新动向 Get大咖技术交流群
加入AI学习入门群
AI入门避坑攻略 共享大咖学习笔记
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验