Онлайн компилятор C

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

- 代码中 `arr[j] % 10` 获取的是个位数字,但注意负数取模的结果在C语言中可能是负数。如果输入包含负数,个位数字的比较逻辑会出错,因为负数的个位数字(如-3的个位是-3)与正数的比较方式不同。
- 排序算法本身是正确的冒泡排序结构,但只比较个位数字,这意味着个位数字相同的元素会保持原有相对顺序(稳定排序),但整体排序依据仅是个位数字,而不是数值本身。