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

插入排序中使用input[i]与current变量为何输出结果不同?

插入排序中current变量与直接访问input[i]的差异问题

在这段C语言插入排序代码中,内部循环的if条件里用input[i]替代current变量会得到错误输出,用current则结果正确。例如输入数组1 7 4 0 9 4,用input[i]得到1 4 0 7 4 9,用current得到0 1 4 4 7 9。明明二者看似访问的是同一索引的值,为什么结果不同?

void insertionSort(int *input, int size)
{
    int j;
    for(int i=1; i<size; i++){
        int current = input[i];
        for(j=i-1; j>=0; j--){
            if(current < input[j]){
                input[j+1] = input[j];
            }
            else{
                break;
            }
        }
        input[j+1] = current;
    }
}

问题原因

核心原因是内部循环里的input[j+1] = input[j]会修改input[i]的值。

当你第一次进入内部循环时,j的初始值是i-1,此时j+1正好等于i。执行input[j+1] = input[j]这行代码时,会把input[i]的原始值覆盖成input[i-1]的值。后续循环再判断input[i]时,它已经不是最初的待插入元素了,而是被前面元素覆盖后的新值,这直接打乱了插入排序的逻辑,导致最终结果错误。

而使用current变量时,我们在进入内部循环前就把input[i]的初始值保存了下来。后续不管数组元素怎么被移动覆盖,current始终保持最初的待插入元素值,排序逻辑就能按照预期执行,得到正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:55:36