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=size-1;j>i;j--){ if(a[tem]>a[j]){ tem=j; } } 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]={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; }
这段代码试图实现一个选择排序算法,但存在几个问题。

首先,数组初始化语法有误。在C语言中,花括号内的元素需要用逗号分隔,而不是空格。你写的是 `{20 20 19 ...}`,这会导致编译错误。

其次,排序逻辑中内层循环的起始点可以优化。当前内层循环从 `size-1` 开始向 `i` 递减,这虽然能工作,但选择排序通常从 `i+1` 开始向后扫描,这样更直观且减少不必要的比较。

- 检查数组初始化部分,确保元素之间用逗号分隔。
- 思考内层循环的起始位置:选择排序是在未排序部分中找到最小元素,未排序部分通常从 `i+1` 开始,而不是从末尾反向扫描。