在线编译器 C

#include <stdio.h> int main() { int arr[10]; int a, b, c; for (int i = 0; i < 10; i++) { scanf("%d", &arr[i]); } for (a = 0; a < 9; a++) { for (b = 0; b < 9 - a; b++) { int last1 = arr[b] % 10; int last2 = arr[b + 1] % 10; if (last1 > last2) { c = arr[b]; arr[b] = arr[b + 1]; arr[b + 1] = c; } } } for (int a = 0; a < 10; a++) { printf("%d ", arr[a]); } return 0; }
这段代码实现了一个冒泡排序,但排序的依据是每个整数的个位数(即除以10的余数),而不是整数本身的大小。程序会读取10个整数,然后按照它们的个位数从小到大排序,最后输出排序后的数组。

- 注意代码中变量 `a` 被重复使用了。外层循环的 `a` 和内层循环后的 `for` 输出语句中又声明了 `int a`,这会导致作用域混淆。建议检查变量命名,避免在同一个函数内用同一个名字表示不同变量。
- 排序的逻辑只比较个位数,但交换的是整个整数。如果两个数的个位数相同,它们的相对顺序会怎样?思考一下冒泡排序的稳定性,以及这里是否保持了原始顺序。