在线编译器 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; }
这段代码试图实现一个排序函数,但存在几个关键问题。

首先,`main` 函数中的 `scanf` 用法是错误的。`scanf` 需要格式字符串和变量地址来读取输入,而这里直接写了一个数字字符串,这不会正确读取数据到数组 `a` 中。

其次,排序算法的逻辑有缺陷。你使用了类似选择排序的思路,但内层循环的变量 `tem` 初始化为 `i`,然后在内层循环中每次比较后都重置 `tem`,并且交换操作放在了内层循环内部,这会导致排序过程混乱。

- 检查 `scanf` 的用法:你需要用循环逐个读取数字到数组 `a` 中,或者用其他方式初始化数组。
- 重新审视排序逻辑:选择排序应该先找到未排序部分的最小元素下标,然后在外层循环结束后交换一次,而不是在内层循环中反复交换。