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

为何Java中未用correct变量的Cyclic Sort代码无法运行?

为什么直接使用arr[i]-1的Cyclic Sort代码无法正常运行?

问题出在代码1的交换逻辑里,修改arr[i]后再用它计算索引会导致致命错误:

看代码1的交换步骤:

int temp = arr[i];
arr[i] = arr[arr[i] - 1]; // 这里已经修改了arr[i]的原始值
arr[arr[i] - 1] = temp;   // 这里用的是修改后的arr[i]来计算索引,完全偏离了目标位置!

举个具体例子:假设当前arr[i]的值是3,那么原本要交换的索引是3-1=2。第一步执行后,arr[i]被替换成arr[2]的值(比如是5),这时候第二步计算arr[i]-1就变成了5-1=4,导致temp被放到了索引4的位置,完全不是原本该去的地方。

更严重的是,这种错误会让程序陷入死循环:因为元素始终没被放到正确位置,arr[i] != arr[arr[i]-1]的判断会一直成立,i永远不会递增,程序就卡在循环里不动,表现为无输出也无报错。

而代码2用correct变量提前存储了交换前的arr[i]-1值,后续交换全程使用这个固定的正确索引,不会因为arr[i]被修改而打乱逻辑,所以能正常完成排序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:43:12