在线编译器 C

#include <stdio.h> int main() { int a[10]; int i, j, temp; for (int n = 0; n < 10; n++) { scanf("%d", &a[n]); } for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) { int b = a[j] % 10; int c = a[j + 1] % 10; if (c > b) { temp = a[j + 1]; a[j + 1] = a[j]; a[j] = temp; } } } for (int n = 0; n < 10; n++) { printf("%d ", a[n]); } return 0; }
这段代码试图根据数字的个位数对10个整数进行降序排序。目前存在一个数组越界的问题。

- 内层循环 `for (j = 0; j < 10; j++)` 中,当 `j = 9` 时,访问 `a[j + 1]` 即 `a[10]`,这超出了数组 `a[10]` 的有效索引范围(0到9)。需要调整循环条件,确保不会访问到数组边界之外。
- 冒泡排序通常需要多轮遍历,但这里的内层循环每次都会遍历整个数组,并且没有考虑已经排好的元素。可以思考一下如何减少不必要的比较次数,或者检查当前逻辑是否真的能完成排序。