Online Compiler C

#include <stdio.h> int main() { int arr[10]; int i, a, b; for(i=0;i<10;i++) { scanf("%d", &arr[i]); } for(i=0;i<9;i++) { for(a=0;a<9-i;a++) { int x=arr[a]%10; int y=arr[a+1]%10; if(x>y) { b=arr[a]; arr[a]=arr[a+1]; arr[a+1]=b; } } } for(i=0;i<10;i++) { printf("%d ", arr[i]); } return 0; }
这段代码的功能是:读取10个整数,然后根据每个数的个位数字(即除以10的余数)进行冒泡排序,最后输出排序后的数组。

代码整体思路正确,但有一个关键问题需要注意。

- 冒泡排序的内层循环条件 `a<9-i` 是正确的,但外层循环 `i<9` 也是正确的,不过当数组长度为10时,外层循环通常需要 `i<9` 才能保证完全排序。这里没有问题。

- 主要问题在于:当两个数的个位数字相等时,代码没有处理这种情况。如果个位相同,当前代码会保持原顺序,但题目可能要求按原顺序或按数值大小进一步排序?你需要确认题目要求。如果要求个位相同则按数值大小排序,那么你的比较条件需要扩展。