在线编译器 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; }
这段代码实现了一个选择排序算法,对数组进行升序排序并打印结果。代码逻辑基本正确,但有一个小问题需要注意。

- 内层循环的起始位置是 `j=size-1`,这会导致每次比较都从数组末尾开始,虽然能工作但效率较低。选择排序通常从当前元素的下一个位置开始查找最小值。
- 数组初始化时声明了20个元素,但实际提供了21个初始值,这会导致编译错误或未定义行为。需要检查数组大小与初始值数量是否匹配。