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

学 C 语言,绕不开的第一个算法就是冒泡排序。

它简单、经典、面试常问,也是所有新手建立 “算法思维” 的第一道门。

今天我把冒泡排序从原理→代码→优化→场景一次性讲透,看完你再也不会忘。

一、什么是冒泡排序?为什么叫 “冒泡”?

冒泡排序的核心思想非常形象:

越大的数字,会像水里的气泡一样,一步步 “浮” 到数组的最顶端。

它的逻辑只有两步:

两两比较相邻的两个数如果前面比后面大,就交换位置重复这个过程,直到整个数组有序。

因为每一轮循环,都会把当前最大的数送到最后面,像气泡上浮,所以叫冒泡排序。

二、冒泡排序的核心原理(新手必懂)

假设数组:5 3 8 4 2

第一轮:

3 和 5 交换 → 3 5 8 4 2

5 和 8 不换 → 3 5 8 4 2

8 和 4 交换 → 3 5 4 8 2

8 和 2 交换 → 3 5 4 2 8

最大的 8 浮到最后

第二轮:

3 和 5 不换

5 和 4 交换 → 3 4 5 2 8

5 和 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 语言算法的大门。

你在学冒泡排序的时候,最容易卡壳的是哪一步?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值