算法思想 · 双层循环逻辑 · 升降序切换
零基础也能轻松学懂,完全掌握代码实现
Contents · 本课内容
逐层突破,让你独立看懂、理解通透、会写会改代码
相邻比较、按需交换、逐轮冒泡
外层管轮数,内层管比较
只改一处判断条件,一键切换
搞不清楚内外循环各自负责什么
内层循环范围如何随轮数减少
只改一个符号,却容易写错
重点突破 · 01
就像水里的气泡逐层上浮,大数或小数一步步"冒"到数组末尾
核心原理 · 相邻比较 + 按需交换
观察第一轮排序:最大的数字如何一步步"冒"到最后
难点突破 · 01
外层管轮数,内层管比较——口诀记牢,永不混淆
难点突破 · 内外循环各司其职
记住这句核心口诀,双层循环逻辑再也不会混淆
难点突破 · 02
每完成一轮,有序元素多一个,内层循环范围减一
| 轮次(外层循环 i) | 已固定有序的元素 | 内层循环比较次数 | 内层循环边界 j < |
|---|---|---|---|
| 第 1 轮(i = 0) | 无 | 3 次 | n - 1 |
| 第 2 轮(i = 1) | 末尾最大值 | 2 次 | n - 2 |
| 第 3 轮(i = 2) | 末尾两个值 | 1 次 | n - 3 |
| 第 i 轮 | 末尾 i 个值已固定 | n - 1 - i 次 | n - 1 - i |
每一轮都完整遍历所有元素,造成代码冗余,甚至下标越界报错
内层循环边界设为 n-1-i,已排序的末尾元素不再重复比较
重点突破 · 02 + 难点突破 · 03
从升序到降序,只需修改一个判断条件
C# 实现 · 标准升序排序
双层 for 循环搭建结构,前一个大于后一个则交换
数组下标从 0 开始,内层循环边界必须是 n-1-i
必须借助 temp 变量中转,不能直接赋值覆盖
核心技巧 · 一键切换升降序
掌握这个技巧,升序降序自由切换
判断条件:前一个 大于 后一个
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
判断条件:前一个 小于 后一个
if (arr[j] < arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
Summary · 核心口诀总结
截图保存,随时复习
相邻比较、按需交换。就像气泡上浮,一轮一轮把最大(或最小)的值推到正确位置。
外层管轮数:控制总共排多少轮(n-1轮)。
内层管比较:负责每轮内部的相邻对比与交换。
每完成一轮外层循环,末尾就多一个有序元素,内层循环边界减一:j < n-1-i
只改一个判断符号!升序用 >,降序用 <。循环结构、交换代码完全不变。
恭喜你完成了冒泡排序重难点专项学习!
课后请独立完成一遍代码编写,巩固所学。