在线编译器 C

#include <stdio.h> int main() { int a[10]; for (int j = 0; j < 10; j++) { scanf("%d", &a[j]); } for (int i = 0; i < 10; i++) { int mini = i; for (int j = i + 1; j < 10; j++) { if (a[i]%10 < a[mini]%10) { mini = i; } } int tmp = a[i]; a[i] = a[mini]; a[mini] = tmp; } for (int i = 0; i < 10; i++) { printf("%d ", a[i]); } return 0; }
这段代码试图实现一个选择排序,但排序的依据是每个数字的个位数(即 `a[i] % 10`)。不过排序逻辑中存在错误,导致无法正确排序。

- 在内层循环中,你比较的是 `a[i]%10` 和 `a[mini]%10`,但 `i` 是外层循环的固定值,所以每次比较的都是同一个元素,没有真正找到剩余部分中个位数最小的元素。你应该比较 `a[j]%10` 和 `a[mini]%10`。
- 找到最小元素后,交换操作应该放在内层循环结束之后,但你的代码中交换位置正确,问题主要出在内层循环的比较条件上。