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

C语言实现Count Sort时排序不完整 后续结果全部输出0

计数排序代码问题修复方案

核心问题原因

你的代码存在两处直接导致输出异常的逻辑错误:

  • 计数数组初始化范围错误
    count_sort_calculate_counts函数中,计数数组count_array的下标对应待排序元素的取值,需要初始化所有取值范围的位置,而不是仅初始化和输入数组长度等量的前N位。
  • 输出写入时遍历计数数组的范围错误
    count_sort_write_output_array函数的外层循环是遍历所有可能的待排序取值,上限应该是最大待排序值,而非输入/输出数组的长度,这是导致你仅前几位输出正常、后续全为0的直接原因:大于当前循环上限的数值计数完全没有被写入输出数组,输出数组剩余未赋值的位置默认就是0。

另外全局定义的循环变量i、j、k存在重入冲突隐患,建议改为函数内局部变量。

修复后代码

int MAX_LAENGE = 1000;
int MAX_VALUE = 100;

void count_sort_calculate_counts(int input_array[], int len, int count_array[]) {
    // 修复:初始化所有取值对应的计数数组位置
    for (int i = 0; i <= MAX_VALUE; i++)
    {
        count_array[i] = 0;
    }
    for (int j = 0; j < len; j++)
    {
        count_array[input_array[j]] = count_array[input_array[j]] + 1;
    }
}

void count_sort_write_output_array(int output_array[], int len, int count_array[]) {
    int k = 0;
    // 修复:遍历所有可能的取值,而非输出数组长度
    for (int j = 0; j <= MAX_VALUE; j++)
    {
        for (int i = 0; i < count_array[j]; i++)
        {
            output_array[k] = j;
            k = k + 1;
        }
    }
}

额外注意事项

  • 需保证输入的待排序元素取值不超过MAX_VALUE,否则会出现数组越界访问问题
  • 计数数组的定义长度需要为MAX_VALUE + 1,避免下标越界

内容的提问来源于stack exchange,提问作者WOLOLOMyChild

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:15:03