Online Compiler C

#include <stdio.h> void sort_array(int size, int a[]){ for(int i=0;i<size;i++){ int tem=i; for(int j=i-1;j>i;j--){ if(a[i]>a[j]){ tem=i; } if(tem!=i){ int temp=a[i]; a[i]=a[tem]; a[tem]=temp; } } } for(int i=0;i<size;i++){ printf("%d ",a[i]); } } int main() { int a[20]; scanf("20 20 19 4 3 2 1 18 17 13 12 11 16 15 14 10 9 8 7 6 5"); sort_array(20,a); return 0; }
这段代码试图实现一个排序函数,但存在多个逻辑错误。主要问题在于排序算法本身和主函数中的输入方式。

- 内层循环 `for(int j=i-1;j>i;j--)` 的条件 `j>i` 永远不会成立,因为 `j` 从 `i-1` 开始,而 `i-1` 已经小于 `i`,所以循环体一次都不会执行。你需要重新设计内层循环的逻辑,让它能正确比较和交换元素。

- 主函数中 `scanf` 的格式字符串写成了固定的数字序列,这不会从标准输入读取数据。`scanf` 的格式字符串应该用 `%d` 等转换说明符来匹配输入,而不是直接写数值。你需要修改 `scanf` 的调用方式,或者考虑用其他方式初始化数组。