在线编译器 C

#include <stdio.h> int main(){ int c=0; int a,i; scanf("%d",&a); int const N=100; int A[N]; while(a>0){ A[c]=a%10; c++; a=a/10; } int d=0; for(i=0;i<c-1;i++){ for (int j=0;j<c-1;j++){ if (A[j]<A[j+1]){ d=A[j]; A[j]=A[j+1]; A[j+1]=d; } } } for (i=0;i<c;i++){ printf("%d",A[i]); } return 0; }
这段代码的功能是:读入一个整数,将其各位数字提取出来,然后按从大到小排序,最后输出排序后的数字序列。

代码整体思路正确,但存在一个逻辑问题:

- 外层循环 `for(i=0;i<c-1;i++)` 中变量 `i` 没有在冒泡排序的内层循环中使用,导致排序可能不完整。冒泡排序需要外层循环控制多轮比较,但这里外层循环的变量 `i` 没有被用于限制内层循环的范围,实际上内层循环每次都完整地比较了所有相邻元素,这会导致排序结果可能不正确,因为冒泡排序需要每轮减少一次比较次数。

- 另外,变量 `d` 用于交换,但命名不够清晰,不过不影响功能。