在线编译器 C

#include <stdio.h> int main() { int a[10]; for (int i = 0; i < 10; i++) { scanf("%d", &a[i]); } for (int i = 0; i <5-1; i++) { for (int j = 0; j < 5-1-i; j++) { if (a[j]>a[j+1]){ int temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } } for (int i = 0;i < 5-1; i++) { for (int j = 5; j < 9-1; j++) { if (a[j] < a[j+1]) { int temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } } for (int i = 0; i < 10; i++) { printf("%d ", a[i]); } printf("\n"); return 0; }
这段代码读取10个整数,然后尝试对前5个元素进行升序排序,对后5个元素进行降序排序,最后输出整个数组。

- 第一个排序循环中,外层循环条件 `i < 5-1` 是正确的,但内层循环条件 `j < 5-1-i` 会导致只比较前4个元素中的部分元素,实际上应该比较前5个元素中未排序的部分。检查一下内层循环的边界是否覆盖了所有需要比较的元素对。

- 第二个排序循环中,内层循环条件 `j < 9-1` 只让j从5到7,但后5个元素的下标是5到9,需要比较的下标范围应该是5到8。同时注意外层循环 `i < 5-1` 只执行4次,但后5个元素排序只需要4轮,这里逻辑正确,但内层循环的终止条件需要调整。