You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请解释冒泡排序(Bubble Sort)及对应C语言实现代码无法运行的问题

冒泡排序基本原理

冒泡排序是基础的交换类排序算法,核心逻辑为:

  • 逐轮遍历待排序的数组,每次对比相邻的两个元素
  • 如果两个元素顺序不符合排序要求(比如要升序的话,就是前面的数比后面的大),就交换两个元素的位置
  • 每一轮遍历结束后,当前未排序区间里的最大/最小值就会被“冒泡”到区间的末尾
  • 重复执行遍历操作,直到某一轮遍历全程没有发生任何交换,说明数组已经完全有序,结束排序
你提交的代码存在的问题

你写的代码无法运行、不能实现排序的原因如下:

  • 变量未声明:i、j、temp三个变量均没有提前声明,C语言要求所有变量必须先声明后使用,缺少声明会直接报编译错误。
  • 交换逻辑错误:你判断a[j] < a[i]需要调整顺序,但实际交换的是a[i+1]和a[j],不仅a[i]的值没有被调整,还会直接覆盖a[i+1]的原始值,逻辑完全错误。
  • 逻辑不符合冒泡排序的设计:你当前的双层循环结构更接近选择排序的写法,标准冒泡排序的内层循环是逐位对比相邻元素,而不是用j直接和i对比。
修正后的冒泡排序实现代码
void bubble(int a[], int n) {
  // 先声明所有需要用到的变量
  int i, j, temp;
  // 加flag做优化:某轮没有交换就说明已经有序,直接退出
  int flag;
  for(i = 0; i < n - 1; i++) {
    flag = 0;
    // 内层循环遍历未排序区间,对比相邻元素
    for(j = 0; j < n - 1 - i; j++) {
      // 升序排序:前面的数比后面的大就交换
      if(a[j] > a[j+1]) {
        temp = a[j];
        a[j] = a[j+1];
        a[j+1] = temp;
        flag = 1;
      }
    }
    if(flag == 0) {
      break;
    }
  }
}

内容的提问来源于stack exchange,提问作者maria

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 14:54:03