图解冒泡排序

简介: 本文通过图解的方式介绍冒泡排序算法,帮助读者更直观地理解其工作原理和实现过程。

一.什么是冒泡排序

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

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

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

  • 时间复杂度:O(n²)

  • 算法稳定性:稳定排序算法

  • 实 质:把小(大)的元素往前(后)调

  • 思想: 交换思想

  • 原理:

    • 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
    • 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
    • 针对所有的元素重复以上的步骤,除了最后一个。
    • 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
  • 图解:(参考《Java数据结构和算法》书籍上的图片)

    • 未排序的一行人:

      image-20210826221105258-1629987068544

    • 从第一个人开始与第二个人进行比较,矮的站前面,高的继续和后面的人比,直到最后一人成为最高的,那么第一轮比较结束

      在这里插入图片描述

      image-20210826222703603

    • 然后第二轮继续比较,从第一个人开始依次比较,注意本轮不需要和最后一人(最高的)进行比较了,将第二高的人排在了倒数第二的位置,本轮结束。后续按照此规则继续比较,直到整个队列从小到大排序。如下:

      image-20210826222747767

二. 逻辑推演

现有一个数组,里面的数据为: [11,17,28,34,67,48,47,66],我们以此数据来分析:

第一轮比较:

原始数据排列情况如下:

image-20210827141708676

我们冒泡排序比较是从第一个元素开始进行,然后和第二个元素进行比较,由于11和17比较,11比17小,不需要交换;因此!紧接着应该由17和28进行比较,这时发现17比28小,位置继续保持不变!

image-20210827141851245

接下来继续由28和34进行比较:

image-20210827141956689

发现依然不变,继续让34和67进行比较:

image-20210827142030370

34比67小,依然不变。继续:

image-20210827142054635

当67和48比较的时候,由于67比48大!因此两者交互了!

image-20210827142117667

接下来:67和47进行比较,67比47大,继续交换:

image-20210827142152409

最后,67和66继续比较,发现67更大,那么继续完成交换:

image-20210827142224809

小结:

通过第一轮 7 次比较,最终将最大值交换到了最右边!

第二轮比较:

依然从第一个数进行比较,将第二大的数给排序到右边去:

image-20210827142627534

第三轮:

排序后的结果:

image-20210827142850766

第四轮:

image-20210827142909401

第五轮:

image-20210827142920676

第六轮:

image-20210827142930722

第七轮:

image-20210827142938508

总结:

第一轮比较7次

第二轮比较6次

第三轮比较5次

...

第七轮比较1次

目录
相关文章
|
6月前
|
算法 搜索推荐 Java
图解冒泡排序
图解冒泡排序
45 4
|
1月前
|
算法 搜索推荐
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
本文介绍了冒泡排序、选择排序和插入排序三种基础排序算法的原理、实现代码和测试结果。
18 0
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
|
存储 人工智能 搜索推荐
冒泡排序:了解原理与实现
冒泡排序:了解原理与实现
86 0
|
存储
图解:非递归实现快速排序
方法的调用实际是使用了方法调用栈。递归不就是方法调用本身就是入栈和出栈的过程吗。如果是这样的话,我们就可以使用栈来替换之前的递归,在栈中存储方法每次传入的参数即可。
135 0
图解:非递归实现快速排序
|
算法 搜索推荐
图解:冒泡排序升级之【鸡尾酒排序】
鸡尾酒排序,是冒泡排序算法的一种升级。冒泡排序的每个元素都可以像气泡一样,根据自身大小,一点点的向着数组的某侧移动。算法每一轮都是从左到右来比较元素,进行**单向**的位置交换的。而鸡尾酒排序是在此基础上元素比较和交换过程变成了**双向**的。固[鸡尾酒]排序又称双向冒泡排序、鸡尾酒搅拌排序、搅拌排序、涟漪排序、来回排序或快乐小时排序, 是冒泡排序的一种变形。
145 0
图解:冒泡排序升级之【鸡尾酒排序】
|
搜索推荐
冒泡排序的原理
冒泡排序算法的原理如下: 1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 3.针对所有的元素重复以上的步骤,除了最后一个。 4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比比较 白话就是:比如有6个数,你需要比较5趟,这个是固定死的
245 0
|
算法
【二分查找】详细图解
【二分查找】详细图解
164 0
冒泡排序图解
冒泡排序图解
62 0
|
算法 搜索推荐 索引
选择排序图解
选择排序图解
114 0
选择排序图解
|
搜索推荐
排序算法图解(二):选择排序
文章目录 1 选择排序简介 2 图解选择排序算法 3 选择排序代码实现 写在最后
排序算法图解(二):选择排序