在线编译器 C

#include <stdio.h> int main(){ int x,x_save,count=0; scanf("%d",&x); x_save=x; while(x>0){ count++; x=x/10; }int a[count]; for(int i=count-1;i>=0;i--){ a[i]=x_save%10; x_save=x_save/10; } for(int i=0;i<count;i++){ int num=count-1; while(num>=0){ if(a[i]<a[num]){ int temp=a[i]; a[i]=a[num]; a[num]=temp; break; } else num--; }printf("%d",a[i]); } return 0; }
这段代码试图将一个整数的各位数字按升序排序并输出,但排序逻辑有误,导致输出结果不正确。

代码先读取一个整数,计算它的位数,然后将各位数字存入数组。接着尝试用类似选择排序的方法排序,但内层循环的逻辑有问题:它从数组末尾向前比较,一旦发现比当前元素大的就交换并立即跳出循环,这并不能保证正确排序。

- 内层循环的 `break` 导致只交换一次就停止,无法完成完整的排序过程。排序需要多次比较和交换,而不是遇到一个更大的数就停止。
- 排序算法通常需要两层循环:外层控制当前要放置的位置,内层遍历剩余元素找到最小(或最大)值。你的内层循环从末尾向前找,但逻辑不完整,无法正确找到最小值。