C语言冒泡排序详解:原理、代码实现与性能优化

沈知远
沈知远
发布时间:2026-10-15 | 4人浏览过
原创

在数据处理中,将无序数组调整为有序状态是常见需求。冒泡排序(Bubble Sort)作为最基础的排序算法之一,通过反复比较相邻元素并交换位置来逐步完成排序。本文将解析其工作原理,提供标准C语言实现,并展示如何通过添加标记变量优化性能。

核心原理

以数组 {3, 2, 4, 1} 从大到小为例,冒泡排序的核心在于“逐渐移动最大元素到末尾”。每一轮遍历都会让当前未排序部分的最大值“冒泡”到正确位置:

  • 第一轮:比较 (3,2)→不换位;(3,4)→换位为 (2,3);(3,1)→换位。最终最大值 4 移至末尾。
  • 第二轮:对剩余前三个元素进行比较,找到次大值 3 放置在倒数第二位。
  • 第三轮:继续对前两个元素比较,完成整体排序。

该过程共需进行 n-1 轮比较(n 为元素个数)。随着轮次增加,参与比较的有效范围逐渐缩小。

基础实现

以下是标准的 C 语言冒泡排序代码。通过双重循环实现外层控制轮数,内层控制相邻元素的比较与交换:

#include<stdio.h>
int main(){
    int nums[10]={4,5,2,10,7,1,8,3,6,9};
    int i, j, temp;
    // 外层循环:控制 n-1 轮比较
    for(i=0; i<10-1; i++){
        // 内层循环:前 n-1-i 个元素两两比较
        for(j=0; j<10-1-i; j++){
            if(nums[j] > nums[j+1]){
                temp = nums[j];
                nums[j]= nums[j+1];
                nums[j+1]= temp;
            }
        }
    }
    // 输出排序结果
    for(i=0; i<10; i++){
        printf("%d ", nums[i]);
    }
    printf("\n");
    return 0;
}

运行上述程序,控制台输出:

1 2 3 4 5 6 7 8 9 10

第1步:添加提前终止机制

目的:减少无效的比较次数。
方法:引入布尔标志位 isSorted。若某轮比较中未发生任何元素交换,说明数组已有序,可直接结束循环。

#include<stdio.h>
int main(){
    int nums[10]={4,5,2,10,7,1,8,3,6,9};
    int i, j, temp, isSorted;
    // 最多进行 n-1 轮比较
    for(i=0; i<10-1; i++){
        isSorted = 1; // 假设本轮无需交换
        for(j=0; j<10-1-i; j++){
            if(nums[j] > nums[j+1]){
                temp = nums[j];
                nums[j]= nums[j+1];
                nums[j+1]= temp;
                isSorted = 0; // 发现交换,重置标志
            }
        }
        // 若无交换,说明已排好序,跳出循环
        if(isSorted) break;
    }
    for(i=0; i<10; i++){
        printf("%d ", nums[i]);
    }
    printf("\n");
    return 0;
}

总结

冒泡排序逻辑简单,易于理解,但在大规模数据面前性能有限。通过上述优化手段,可以显著降低其在近乎有序数组中的时间复杂度。以上就是C语言冒泡排序详解的详细内容,更多关于C语言算法优化的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表