C语言数组排序问题:无法实现降序输出,请求代码修正
问题分析与代码修正
原代码的核心问题
- 内层循环仅将
a[i]替换为更大的元素,未进行元素交换,无法实现数组排序 - 每次输出后手动重置数组为初始值,导致每次迭代都在处理原始数组,最终重复输出最大值20
修正后的代码
采用选择排序实现降序排列,完成排序后再遍历输出:
#include <stdio.h> int main(int argc, char *argv[]) { int a[4] = {20, 4, 7, 8}; int temp; // 选择排序:降序排列数组 for (int i = 0; i < 4; i++) { int max_idx = i; // 查找当前未排序区间的最大值索引 for (int j = i + 1; j < 4; j++) { if (a[j] > a[max_idx]) { max_idx = j; } } // 交换当前位置与最大值位置的元素 temp = a[i]; a[i] = a[max_idx]; a[max_idx] = temp; } // 输出排序后的数组 for (int i = 0; i < 4; i++) { printf("%d\n", a[i]); } return 0; }
代码说明
- 选择排序通过两层循环实现:外层循环确定当前要填充的位置,内层循环找到该位置之后的最大值
- 交换操作将最大值放到当前位置,逐步完成整个数组的降序排序
- 排序完成后统一输出,结果符合预期:
20
8
7
4
内容的提问来源于stack exchange,提问作者Omm
相关产品推荐
相关产品推荐

