在线编译器 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 < 9; i++) { for (j = 0; j < 9; j++) { int b = a[j] % 10; int c = a[j + 1] % 10; if (c < b) { temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } } for (int n = 0; n < 10; n++) { printf("%d ", a[n]); } return 0; }
这段代码实现了一个冒泡排序,但排序的依据是每个整数的个位数字(通过取模10得到),而不是整数本身的大小。它读取10个整数,然后按照个位数字从小到大排序,最后输出排序后的数组。

- 内层循环的边界 `j < 9` 是正确的,但冒泡排序通常需要随着外层循环的进行而减少内层循环的范围,否则会进行不必要的比较。你可以思考一下如何优化内层循环的终止条件,让它随着 `i` 的增加而减少。
- 排序的比较条件 `if (c < b)` 中,`b` 是 `a[j]` 的个位,`c` 是 `a[j+1]` 的个位。当 `c < b` 时交换,这是升序排列。但注意,如果两个数的个位相同,它们的相对顺序会保持不变吗?这取决于你的需求,目前代码没有处理个位相等的情况。