在线编译器 C

#include <stdio.h> void sort_array(int size, int a[]){ for(int i=0;i<size;i++){ int tem=i; for(int j=size-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; }
这段代码试图实现一个排序函数,但存在几个问题。`sort_array` 函数内部逻辑不完整,`main` 函数中的 `scanf` 使用方式也不正确。

- 在 `sort_array` 中,内层循环 `for(int j=size-1;j>i;j--)` 只是遍历了元素,但没有真正比较和交换。变量 `tem` 被赋值为 `i` 后,在内层循环中只有当 `a[i] > a[j]` 时才更新 `tem`,但 `tem` 始终等于 `i`,所以后面的交换条件 `if(tem!=i)` 永远不会成立,数组实际上没有被排序。你需要重新考虑如何找到最小元素的位置并交换。

- `main` 函数中的 `scanf` 格式字符串 `"20 20 19 4 3 2 1 18 17 13 12 11 16 15 14 10 9 8 7 6 5"` 是错误的。`scanf` 的格式字符串应该指定输入格式(如 `%d`),而不是直接写数据。这里应该用循环读取20个整数,或者直接初始化数组。