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

C语言冒泡排序函数for循环失效原因求助

冒泡排序函数失效原因解析

问题背景

在不支持for循环参数内声明变量的C版本中,将循环变量i、j在外部声明并初始化后,冒泡排序函数完全无法正确排序;改为外部声明、在for循环参数内初始化后,函数恢复正常。以下是两种版本的代码:

非工作版本

void bubbleDesc (int n, int array[])
{
  
  int i = 0, j = 0, temp;
  
  for (i; i < n - 1; i++)
  {
    for (j; j < n - 1; j++)
    {
      if (array[j] < array[j + 1])
      {
        temp = array[j + 1];
        array[j + 1] = array[j];
        array[j] = temp;
      }
    }
  }
  
}

工作版本

void bubbleDesc (int n, int array[])
{
  
  int i, j, temp;
  
  for (i = 0; i < n - 1; i++)
  {
    for (j = 0; j < n - 1; j++)
    {
      if (array[j] < array[j + 1])
      {
        temp = array[j + 1];
        array[j + 1] = array[j];
        array[j] = temp;
      }
    }
  }
  
}

失效原因分析

非工作版本的核心问题在于循环变量j没有在每次外层循环迭代时重置为0:

  • 第一次外层循环执行时,j初始值为0,内层循环正常遍历数组完成一轮冒泡交换,结束后j的值会变为n-1(此时j < n-1条件不成立,退出内层循环)。
  • 进入第二次外层循环时,内层循环的第一个表达式是j,这是无意义的空操作,不会重置j的值。此时j仍为n-1,直接不满足j < n-1的条件,内层循环完全跳过。
  • 后续所有外层循环迭代中,j的值始终保持n-1,内层循环都不会执行,数组只被处理了一轮,无法完成完整的冒泡排序,最终导致函数失效。

工作版本中,每次外层循环迭代时,内层循环的for (j = 0; j < n - 1; j++)都会将j重置为0,确保每一轮外层循环都能让内层循环从头遍历数组,完成正确的冒泡交换过程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 19:00:06