尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Java 冒泡排序:最简单的排序,没有之一
Java 冒泡排序:最简单的排序,没有之一面试官让手写排序?掏出冒泡,至少能及格引言冒泡排序(Bubble Sort)是所有排序里最像"废话文学"的那个——原理简单到不用脑子:大的往后冒,小的往前浮,一趟一趟比,直到整个数组有序。但别因为它简单就轻视——冒泡写不对的人,比写对的人多。尤其是两层循环的边界 + 提前终止优化,能筛掉一半"背代码党"。这篇文章,我会把冒泡拆到不能再拆:用 ASCII 图演示每一趟的真实变化推导为什么最优情况是 O(n) 而不是 O(n²)列出 5 个高频易错点(不是 3 个)配套 LeetCode 真题 912 和 冒泡变形题读完这篇,冒泡排序的所有面试坑,你都能避开。1. 核心思想:像水泡一样往上浮冒泡的精髓用一句话讲:每趟把当前未排序部分的最大元素"冒"到末尾。1.1 通俗理解想象一排水泡,最重的水泡往下沉,最轻的往上浮。但冒泡排序反过来——大的往后走,因为大的元素通过相邻交换会逐渐移动到最右端。1.2 ASCII 图解演示以数组[5, 2, 8, 4, 7]为例,看完整排序过程:初始:[5, 2, 8, 4, 7] 第 1 趟(i=0,j 从 0 到 3): [5, 2, 8, 4, 7] → 5 2,交换 [2, 5, 8, 4, 7] → 5 8,不交换 [2, 5, 8, 4, 7] → 8 4,交换 [2, 5, 4, 8, 7] → 8 7,交换 结果:[2, 5, 4, 7, 8] ← 8 已经冒到最后 第 2 趟(i=1,j 从 0 到 2): [2, 5, 4, 7, 8] → 2 5,不交换 [2, 5, 4, 7, 8] → 5 4,交换 [2, 4, 5, 7, 8] → 5 7,不交换 结果:[2, 4, 5, 7, 8] ← 7 已经到位 第 3 趟(i=2,j 从 0 到 1): [2, 4, 5, 7, 8] → 2 4,不交换 [2, 4, 5, 7, 8] → 4 5,不交换 swapped = false,提前终止! 最终:[2, 4, 5, 7, 8]在这个图解中,i和j是冒泡排序中两层循环的“指针”,它们各自承担着完全不同的职责。(1).i—— “趟数计数器”(外循环)它代表什么:表示已经有多少个最大的元素被排到了数组末尾。它的作用:控制总共需要执行多少轮“冒泡”过程。取值范围:在n=5的数组中,i从0开始,到3结束(即i n-1)。因为每冒泡一趟,末尾就固定一个数。排好 4 个数后,剩下的 1 个自然就在最前面了,所以只需要n-1趟。结合图解看:第 1 趟(i=0):末尾 0 个已排好,目标是把最大的 8 冒到最后。第 2 趟(i=1):末尾已经有 1 个(8)排好了,目标是把剩下的最大数 7 冒到倒数第二位。第 3 趟(i=2):末尾已经有 2 个(7,8)排好了,继续处理剩余部分。(2).j—— “比较指针”(内循环)它代表什么:表示当前正在进行“两两比较”时,左边那个元素的下标位置。它的作用:在每一趟中,从数组的最左边开始,逐一进行相邻元素的两两比较(arr[j]和arr[j+1]),并决定是否交换。取值范围:j从0开始,到n - 2 - i结束。为什么要减去i?因为末尾的i个元素已经是最大的且排好序了,指针不需要再去碰它们,这样可以少做无用功。为什么要减 2?因为比较的是j和j+1,为了保证j+1不越界,j最大只能到倒数第二个位置(即n-2)。结合图解看(n=5):第 1 趟(i=0):j从 0 到5-2-0=3。即依次比较下标(0,1)、(1,2)、(2,3)、(3,4),把 8 一路换到最后。第 2 趟(i=1):j从 0 到5-2-1=2。只比较下标(0,1)、(1,2)、(2,3),不去碰下标 4(因为 8 已经在那了),把 7 换到下标 3 的位置。第 3 趟(i=2):j从 0 到5-2-2=1。只比较(0,1)和(1,2),不去碰末尾的 7 和 8。(3). 一句话总结它们的配合i负责“缩小战场”(每过一轮,末尾就多一块已排序的“禁区”),j负责“在战场内扫荡”(从左往右挨个比,把当前战区内最大的那个赶到战区的最后边界)。如果用伪代码写出来,它们的嵌套关系就是:for i = 0 到 n-2: // i 控制趟数 for j = 0 到 n-2-i: // j 控制当前趟的比较位置(边界随 i 缩小) 比较 arr[j] 和 arr[j+1],若逆序则交换1.3 三个关键观察每趟结束后,末尾的元素一定是有序的——最大的已经"沉底"了第 i 趟只需要比较到 n-1-i——因为后面 i 个已经排好如果某趟没有发生任何交换,说明数组已经有序——可以提前终止(这就是最优 O(n) 的来源)2. 完整 Java 实现importjava.util.Arrays;publicclassBubbleSort{/** * 冒泡排序(带提前终止优化) * @param arr 待排序数组(原地修改) */publicstaticvoidbubbleSort(int[]arr){if(arr==null||arr.length2){return;}intn=arr.length;for(inti=0;in-1;i++){booleanswapped=false;for(intj=0;jn-1-i;j++){if(arr[j]/
RELATED

相关推荐

2026多AI工具稳定使用方案:四层隔离架构与故障自愈实践

2026多AI工具稳定使用方案:四层隔离架构与故障自愈实践

1. 项目概述:为什么“稳定使用”比“能用”难十倍?2026年这个时间点不是随便写的——它代表一个临界状态:主流AI工具的调用链路正从“单点可用”加速滑向“多层依赖、动态失效”的复杂系统。ChatGPT、Claude、SuperGrok、Gemini这四个名字背后…

📅 2026/9/25 15:33:10
Tidy Animated Verbs高级技巧:颜色编码与过渡动画的实现原理

Tidy Animated Verbs高级技巧:颜色编码与过渡动画的实现原理

Tidy Animated Verbs高级技巧:颜色编码与过渡动画的实现原理 【免费下载链接】tidyexplain 🤹‍♀ Animations of tidyverse verbs using R, the tidyverse, and gganimate 项目地址: https://gitcode.com/gh_mirrors/ti/tidyexplain Tidy Animat…

📅 2026/9/25 15:14:12
企业级可视化图表架构设计:Mermaid代码驱动图表解决方案技术解析

企业级可视化图表架构设计:Mermaid代码驱动图表解决方案技术解析

企业级可视化图表架构设计:Mermaid代码驱动图表解决方案技术解析 【免费下载链接】mermaid Generation of diagrams like flowcharts or sequence diagrams from text in a similar manner as markdown 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid…

📅 2026/9/23 3:47:40
MORE NEWS

更多资讯

📰

STC单片机ARM转型困局:8051生态惯性与STAR-MC1非标陷阱

1. STC的“双轨困局”:不是不想转ARM,而是8051生态太重、ARM根基太薄你有没有在电子市场随手买过一块STC单片机开发板?大概率是那种蓝色PCB、印着“STC89C52RC”字样的小板子,配个USB转串口芯片,插上电脑就能烧录——这…

📰

滚珠丝杆系统电机驱动器参数匹配实战指南

1. 这不是选型指南,是滚珠丝杆系统驱动匹配的实战诊断手册你手头有一根刚采购回来的C3级精密滚珠丝杆,导程10mm,有效行程800mm,支撑方式是一端固定一端自由;电机选了台额定扭矩5.2Nm、额定转速2000rpm的伺服电机&#…

📰

双向可编程交流电源在新能源并网测试中的实战解析——以DH18600系列为例

做光伏逆变器测试的兄弟应该都有过这种经历:手头一台普通交流电源只能单向往外送电,测并网型产品的时候,被逆变器反灌回来的能量搞得心惊胆战——要么靠电阻负载发热硬扛,要么担心直流母线过压跳机。我第一次接触DH18600系列双向可…

📰

开放式Code Review实操指南:让代码审查不再走过场

1. 为什么绝大多数代码审查都是走过场先说个技术圈的老问题:code review这个词几乎每个团队都在提,每个技术负责人都在强调“一定要做”,可真到了落地的时候,大多数团队的评审流程都停留在“看完给个 LGTM”的状态。我待过几个不同…

📰

Notepad++配置Markdown编辑环境全指南

1. 为什么一个“用Notepad打开.md文件”的操作,值得专门写一篇万字干货?你点开这个标题,心里可能已经划过一句:“就这?不就是右键→打开方式→Notepad?”——我第一次看到这个需求时,反应也差不…

📰

用 Metaflow Client API 搭建流程监控仪表盘:07-worldview 教程全解

MLOps工作流自动化数据工程 【免费下载链接】metaflow Build, Manage and Deploy AI/ML Systems 项目地址: https://gitcode.com/gh_mirrors/me/metaflow 点击查看 免费下载 本教程对应仓库中 metaflow/tutorials/07-worldview/README.md 及配套的 worldview.ipynb…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬