You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 01:46:09