Online Compiler C

#include <stdio.h> enum {size=10}; int main(){ int a[size]; for(int i=0;i<size;i++){ scanf("%d",&a[i]); }for(int i=0;i<size-1;i++){ int num_min=i; for(int j=i+1;j<size;j++){ if(a[i]%10>a[j]%10){ num_min=j; } if(num_min!=i){ int temp=a[j]; a[j]=a[i]; a[i]=temp; } } }for(int i=0;i<10;i++){ printf("%d ",a[i]); } return 0; }
这段代码试图实现一个按个位数排序的选择排序算法,但存在逻辑错误。

代码的主要问题是排序逻辑不正确。在选择排序中,应该先找到最小元素的位置,然后在内部循环结束后再交换,但你的代码在每次比较后都进行了交换,而且交换时使用的索引也有问题。

- 内部循环中,你比较的是 `a[i]%10` 和 `a[j]%10`,但更新 `num_min` 后,应该用 `a[num_min]%10` 与 `a[j]%10` 比较,而不是继续用 `a[i]%10`。
- 交换操作应该放在内部循环结束后,并且交换的是 `a[i]` 和 `a[num_min]`,而不是 `a[i]` 和 `a[j]`。