Java【冒泡排序】算法, 大白话式图文解析(附代码)
创始人
2025-05-28 04:41:54
0

文章目录

  • 一、排序相关概念
    • 1, 什么是排序
    • 2, 什么是排序的稳定性
    • 3, 七大排序分类
  • 二、冒泡排序
    • 1, 图文解析
    • 2, 代码实现
    • 3, 冒泡排序的优化
  • 三、性能分析
  • 四、七大排序算法总体分析

提示:是正在努力进步的小菜鸟一只,如有大佬发现文章欠佳之处欢迎评论区指点~ 废话不多说,直接发车~


一、排序相关概念

1, 什么是排序

📌排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增📈或递减📉的排列起来的操作

👉以 int 类型数据从小到大排序为例:
排序前:4,1,3,6,8,7,2,5
排序后:1,2,3,4,5,6,7,8


2, 什么是排序的稳定性

📌稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。

👉以 int 类型数据从小到大排序为例:
排序前:4,1,3a,6,8,7,2,3b,5(3a 在 3b 之前)
排序后:1,2,3a3b,4,5,6,7,8(3a 还在 3b 之前,稳定)
排序后:1,2,3b3a,4,5,6,7,8(3a 不在 3b 之前,不稳定)

3, 七大排序分类

以下是常见的 7大排序 算法
在这里插入图片描述


二、冒泡排序

1, 图文解析

📌冒泡排序是一种交换排序,他的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到有序为止

冒泡应该是最早接触的一种排序算法了,因为它很简单易懂,尽管如此,还是来看一看冒泡的图解过程:
注意 i , j 下标的变化
在这里插入图片描述
在这里插入图片描述
❓❓❓为什么 每趟冒泡排序之后, i++;而 j 总是从0下标开始呢,
因为一趟冒泡排序结束后只是做到了把 待排序数据的最大值 放在 待排序数据的最后, 而最小值不一定在最前面,所以 i 要从 0 下标开始重新找目前待排序数组的最大值,让他往后放, 循环往复, 最后剩下的那个数据一定是最小的


2, 代码实现

    /*** 冒泡排序* 时间复杂度:最坏 O(N*N) 最好 O(N)* 时间复杂度:O(1)* 稳定性:稳定*/public static void bubleSort(int[] array){for (int i = 0; i < array.length; i++) {for (int j = 0; j < array.length - i - 1; j++) {if (array[j] > array[j + 1]) {swap(array, j, j + 1);}}}}

3, 冒泡排序的优化

其实 j < array.length - i - 1; 这一句代码也是经过简单的优化的, 避免了 j 的无效循环🔄

但这 还是存在效率较低 的情况, 当 待排数据有序 时, i 还是会继续遍历, 从而带动 j 的遍历, 是纯纯浪费❌

👉所以对上述代码的优化方案是:
每次 i 开始循环时 定义一个标记 false , 如果 j 遍历完数组, 发生了交换, 把 false 改成 true , 如果 j 的循环结束发现标记还是false,说明什么?
说明没有发生交换, 待排数据是整体有序的, 那么就不让 i 继续遍历了,直接返回即可

优化后代码:

    public static void bubleSort(int[] array){for (int i = 0; i < array.length; i++) {boolean mark = false;for (int j = 0; j < array.length - i - 1; j++) {if (array[j] > array[j + 1]) {swap(array, j, j + 1);mark = true;}}if (mark == false) {return;}}}

三、性能分析

👉时间复杂度:
最好情况下(数组整体有序),也需要 j 遍历一遍数组,时间复杂度是O(N)
最坏情况下(数组逆序),此时时间复杂度是O(N^2)

👉空间复杂度:
没有额外空间的开销,只有常数个记录的辅助空间,空间复杂度是O(1)

👉稳定性:
稳定

只要是交换时, 两数据相邻就是稳定的算法,只要是跳跃式的交换就是不稳定, 当然别忘了, 稳定的算法也可以修改代码更改成不稳定的


四、七大排序算法总体分析

建议对七大算法都有认识之后, 再对比分析~~

没有完美的排序算法,任何一种算法都是有优点和缺陷的,即便是大名鼎鼎的快速排序,也只是整体上效率比较高,性能相对更优越

现在就整体分析一下各种排序的优缺点📊
在这里插入图片描述

早期的排序算法平均时间复杂度都是O(N^2); 因为原理比较简单, 但性能较差, 所以 一般把直接插入排序,选择排序,冒泡排序归为简单排序一类 其他的都归于 改进排序

📚从平均情况看:
改进过的排序: 希尔排序, 堆排序, 归并排序, 快速排序要胜过 简单排序的性能, 而四个改进算法中, 希尔排序的性能最差

📚从最好情况看:
直接插入排序和冒泡排序最快

📚从最坏情况看:
堆排序和归并排序的性能更胜过快排和其他简单排序

📚综合来看:
堆排序和归并排序比较稳定和强大, 情况最坏时好使
直接插入排序和冒泡排序在基本有序时最好用,
而快速排序比较极端, 最好最坏情况都有缺陷 但是 快速排序能够称之为快速排序, 是因为它的综合性能最强💪,一般情况下是最快的

📚从稳定性来看:
改进排序中只有归并排序

📚从数据个数上看:
数据量越少, 越适合用简单排序, 因为堆排, 快速排序, 归并排序, 都用到了递归, 对于少量数据排序有点"炮弹打蚊子"


如果本篇对你有帮助,请点赞收藏支持一下,小手一抖就是对作者莫大的鼓励啦😋😋😋~


上山总比下山辛苦
下篇文章见

相关内容

热门资讯

电脑怎装安卓系统,轻松实现多系... 你有没有想过,你的电脑除了装Windows系统,还能装上安卓系统呢?没错,就是那个让你手机不离手的安...
安卓系统找不到软件,探寻解决方... 最近是不是你也遇到了这样的烦恼:手机里明明有安卓系统,却怎么也找不到心仪的软件?别急,今天就来给你详...
小米独立系统取代安卓,迈向自主... 小米独立系统:小米与安卓的较量在科技领域,每一次系统的更新换代都牵动着无数科技爱好者和行业从业者的目...
安卓系统会员价格,性价比与权益... 你有没有发现,最近手机上的安卓系统会员价格又涨了?这可真是让人有点头疼呢!咱们一起来聊聊这个话题,看...
安卓点歌系统怎么点歌,享受音乐... 你有没有想过,在安卓手机上点歌竟然也能这么有趣呢?没错,现在就让我带你一起探索安卓点歌系统的奥秘吧!...
w222安卓系统,功能解析与使... 你有没有发现,最近你的手机是不是变得越来越流畅了?没错,我要说的就是那款备受瞩目的W222安卓系统!...
iphone手机使用安卓系统,... 你有没有想过,如果有一天你的iPhone手机突然变成了安卓系统,会是怎样的场景呢?想象那熟悉的苹果界...
安卓系统珠宝手绘软件,艺术与科... 你有没有想过,手机上那些精美的珠宝手绘作品是怎么诞生的呢?其实,这一切都离不开安卓系统上一款神奇的应...
安卓系统app签名方案,安全与... 你有没有想过,为什么你的手机上那么多应用都能无缝运行?这其中,安卓系统app签名方案可是功不可没哦!...
安卓系统关闭应用存储,释放手机... 手机里的应用越来越多,存储空间越来越紧张,是不是感觉手机像是个装满杂物的仓库?别急,今天就来教你怎么...
安卓系统的占比,引领移动设备市... 你知道吗?在智能手机的世界里,有一个系统可是占据了半壁江山,那就是安卓系统!想象你手中的手机,是不是...
在线安卓翻译系统实现,便捷跨语... 你有没有想过,在这个信息爆炸的时代,语言不再是沟通的障碍?没错,我要说的是,在线安卓翻译系统正在悄悄...
安卓系统适配键盘丝印,打造个性... 你有没有发现,用安卓手机打字的时候,有时候键盘上的字母会变得模糊不清,甚至有时候还会出现错别字呢?这...
车载安装安卓系统教程,轻松实现... 你有没有想过给你的爱车来个“大变身”?没错,就是给车载系统来个升级,让它从那个老旧的界面跳脱出来,变...
原生安卓系统6.0精简,极致体... 亲爱的手机控们,你是否曾为手机系统臃肿、运行缓慢而烦恼?今天,就让我带你一探究竟,揭秘原生安卓系统6...
安卓系统与嵌入式系统,安卓系统... 你知道吗?在科技的世界里,有一种系统,它就像是个万能的魔法师,既能掌控手机、平板,又能深入到各种智能...
风驰软件安卓系统行吗,引领智能... 你有没有想过,手机上的软件是不是也能像风一样自由驰骋呢?今天,咱们就来聊聊这个话题——风驰软件在安卓...
安卓系统账户哪里查看,轻松查看... 你有没有想过,你的安卓手机里藏着多少秘密?别急,今天就来带你一探究竟,揭秘安卓系统账户的藏身之处!一...
鸿蒙系统和安卓系统跟ios,三... 你知道吗?在智能手机的世界里,有三个小家伙一直在暗中较劲,它们就是鸿蒙系统、安卓系统和iOS。今天,...
安卓系统登苹果账号,体验无缝跨... 你有没有想过,在安卓手机上登录苹果账号,这竟然也能成为一门学问呢?没错,随着科技的发展,跨平台操作变...