Online Compiler C

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

- 内层循环 `for(j=0;j<10;j++)` 中,当 `j=9` 时,访问 `arr[j+1]` 即 `arr[10]`,这超出了数组 `arr[10]` 的有效索引范围(0到9),会导致未定义行为。
- 冒泡排序的内层循环通常应限制在 `j < 10 - i - 1`,因为每轮排序后,最大的元素会移动到末尾,不需要再比较已排好的部分。