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

C语言一维数组基数排序失效问题求助

基数排序后数组未变化的常见排查点
  • 检查最大值计算逻辑
    基数排序的核心是根据最大值的位数循环处理每一位。如果代码中计算最大值的部分出错(比如误将最大值设为数组第一个元素、遍历数组时遗漏元素),会导致循环轮次为0,排序逻辑根本没执行。示例:

    // 错误示例:仅取第一个元素作为最大值
    int max = arr[0];
    // 正确做法:遍历整个数组找最大值
    int max = arr[0];
    for (int i = 1; i < n; i++) {
        if (arr[i] > max)
            max = arr[i];
    }
    
  • 验证计数排序子过程的正确性
    基数排序依赖每一轮的计数排序按当前位排序,这部分最容易出问题:

    1. 计数数组未重置:每处理完一位后,计数数组需要重置为0,否则下一轮的计数会基于上一轮的结果,导致元素无法正确分配。
    2. 临时数组未写回原数组:如果计数排序后,没有将临时数组的内容复制回原数组,原数组自然不会有变化。
    3. 当前位计算错误:确保计算当前位的公式正确,即(arr[i] / exp) % 10,且exp初始为1,每轮循环后乘以10(exp *= 10)。若exp未更新,会一直处理同一位,甚至处理不存在的位。
  • 检查数组操作的有效性
    如果基数排序封装在函数中,确认函数参数传递正确:比如在C语言中,数组参数本质是指针,避免在函数中修改原数组的副本而非原数组本身。

  • 排查循环边界
    确认处理每一位的循环条件正确:循环应持续到exp > max时终止。若循环条件写成exp >= max或其他错误条件,会提前终止循环,导致部分位未处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 13:00:46