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

#include <stdio.h> int main() { int a[10]; int temp; for (int i = 0; i < 5; i++) { scanf("%d", &a[i]); } for (int i = 0; i < 4; i++) { for (int j = 0; j < 4 - i; j++) { if (a[j] > a[j + 1]) { temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } } } for (int i = 0; i < 5; i++) { printf("%d ", a[i]); } for (int i = 5; i < 10; i++) { scanf("%d", &a[i]); } for (int i = 5; i < 9; i++) { for (int q = 0; q < 9 - i; q++) { if (a[q] < a[q + 1]) { temp = a[q + 1]; a[q + 1] = a[q]; a[q] = temp; } } } for (int i = 4; i < 10; i++) { printf("%d ", a[i]); } return 0; }
这段代码首先读取5个整数存入数组前5个位置,用冒泡排序将它们从小到大排序并输出。然后读取另外5个整数存入数组后5个位置,再用冒泡排序将整个数组的前9个元素(注意是前9个,不是后5个)从大到小排序,最后输出数组第5到第9个元素(索引4到9)。

- 第二个排序循环的边界条件有问题。外层循环 `for (int i = 5; i < 9; i++)` 只循环4次,但内层循环 `for (int q = 0; q < 9 - i; q++)` 的终止条件 `9 - i` 会随着i增大而减小,导致排序范围不完整。思考一下:如果要对数组的某一段进行冒泡排序,外层循环应该控制多少趟?内层循环应该比较哪些相邻元素?

- 第二个排序的目的是什么?从输出看,它只输出索引4到9的元素,但排序却影响了索引0到8的元素。这可能导致输出结果不符合预期。请明确你希望排序的是哪一段数据,然后调整循环的起始和结束条件。