在线编译器 C

#include <stdio.h> int main() { int n, a[10], count = 0; scanf("%d", &n); for (int i = 0; n > 0; i++) { a[i] = n % 10; n /= 10; count++; } for (int i = 0; i < count; i++) { for (int j = 0; j < count; j++){ if (a[i] < a[j]) { int temp = a[i]; a[i] = a[j]; a[j] = temp; } } } for (int i = 0; i < count; i++) { printf("%d", a[i]); } return 0; }
这段代码的作用是:读取一个整数,将其每一位数字拆开存入数组,然后对数组进行排序,最后按升序输出所有数字。

代码中存在一个逻辑错误。排序部分使用了冒泡排序的思路,但内层循环的写法会导致排序结果不正确。具体来说,当 `a[i] < a[j]` 时交换,这实际上是在做降序排序,但即使如此,由于循环的嵌套方式,排序过程也不完整。

- 检查排序部分的循环条件:当前写法中,内层循环每次都会从 `j=0` 开始,这会导致已经排好的部分被反复打乱。冒泡排序通常需要让内层循环从 `i+1` 开始,或者调整外层循环的边界。
- 确认排序的方向:如果希望输出升序(从小到大),交换条件应该是 `a[i] > a[j]` 而不是 `a[i] < a[j]`。