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

为什么移除key变量后插入排序的运行结果出现错误?

插入排序代码修改出错原因

核心问题是你修改后用到的arr[i]在循环过程中会被覆盖,和原代码中缓存的key早已不等价:

  • 原代码中key是进入内层循环前就缓存的独立变量,存储的是当前要插入的元素的原始值,整个内层移动元素的过程中key的值不会发生变化,是比较和最终插入的基准值。
  • 删除line a直接用arr[i]替换key后,进入while循环的第一个操作就是arr[j+1] = arr[j],第一次执行该语句时j = i-1,即j+1 = i,这一步直接把arr[i]的原始值覆盖为arr[i-1]的值,后续while条件判断、最终赋值用到的arr[i]已经不是你最初要插入的目标值。

举第一轮循环的实际运行过程为例:
i=1时,arr[i]原始值为3:

原逻辑:key=3,判断arr[0]=4>3成立,执行arr[1] = 4,j减为-1,最后执行arr[0] = key=3,前两位排序后为[3,4],符合预期。
修改后逻辑:无key缓存,第一次判断arr[0]=4>arr[1]=3成立,执行arr[1] = arr[0] =4,此时arr[i]已经变成4,后续所有判断、赋值都是基于值为4的arr[i]执行,最终前两位变为[4,4],和你输出的开头重复4的现象一致。

后续的每一轮循环都会重复该问题,要插入的元素原始值被提前覆盖,最终就会出现大量重复值的错误输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:54:03