语言必学算法:冒泡排序超详细讲解,从原理到优化一次吃透

张开发
2026/6/3 12:32:57 15 分钟阅读
语言必学算法:冒泡排序超详细讲解,从原理到优化一次吃透
学 C 语言绕不开的第一个算法就是冒泡排序。它简单、经典、面试常问也是所有新手建立 “算法思维” 的第一道门。今天我把冒泡排序从原理→代码→优化→场景一次性讲透看完你再也不会忘。一、什么是冒泡排序为什么叫 “冒泡”冒泡排序的核心思想非常形象越大的数字会像水里的气泡一样一步步 “浮” 到数组的最顶端。它的逻辑只有两步两两比较相邻的两个数如果前面比后面大就交换位置重复这个过程直到整个数组有序。因为每一轮循环都会把当前最大的数送到最后面像气泡上浮所以叫冒泡排序。二、冒泡排序的核心原理新手必懂假设数组5 3 8 4 2第一轮3 和 5 交换 → 3 5 8 4 25 和 8 不换 → 3 5 8 4 28 和 4 交换 → 3 5 4 8 28 和 2 交换 → 3 5 4 2 8最大的 8 浮到最后第二轮3 和 5 不换5 和 4 交换 → 3 4 5 2 85 和 2 交换 → 3 4 2 5 8次大的 5 归位…… 以此类推直到全部有序。三、最基础版冒泡排序标准代码#include int main() { int arr[] {5, 3, 8, 4, 2}; int n sizeof(arr) / sizeof(arr[0]); // 外层循环控制轮数 for (int i 0; i n - 1; i) { // 内层循环两两比较 for (int j 0; j n - 1 - i; j) { if (arr[j] arr[j 1]) { // 交换 int temp arr[j]; arr[j] arr[j 1]; arr[j 1] temp; } } } // 输出结果 for (int i 0; i n; i) { printf(%d , arr[i]); } return 0; }代码关键点四、进阶带优化的冒泡排序面试加分基础版有个缺点即使数组已经有序了它还会继续循环。所以我们加一个标志位一旦没发生交换直接提前结束。#include int main() { int arr[] {1, 2, 3, 4, 5}; int n sizeof(arr) / sizeof(arr[0]); for (int i 0; i n - 1; i) { int flag 0; // 0未交换 for (int j 0; j n - 1 - i; j) { if (arr[j] arr[j 1]) { int temp arr[j]; arr[j] arr[j 1]; arr[j 1] temp; flag 1; } } if (flag 0) { break; // 已经有序直接退出 } } for (int i 0; i n; i) { printf(%d , arr[i]); } return 0; }五、冒泡排序的时间复杂度深度理解它属于简单交换类排序适合小规模数据不适合大数据量。六、冒泡排序适合什么场景C 语言入门练手数据量小的排序嵌入式简单数据处理面试、笔试基础算法题七、一句话总结冒泡排序两两比较大数后移每轮确定一个最大值优化后提前退出。掌握它你就真正踏入了 C 语言算法的大门。你在学冒泡排序的时候最容易卡壳的是哪一步

更多文章