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

Delphi两层while循环排序数组 如何去除冗余k变量

无冗余k变量的两层嵌套循环排序实现(Delphi/Lazarus)

原代码中的k属于完全可消除的冗余变量,不需要新增额外变量存储j的初始值,也不需要调整原有排序逻辑。

观察原代码k的取值规律:k初始值为1,每轮外层循环和i同步自增1,全程满足k = i + 1的恒等关系,直接将原代码中j := k替换为j := i + 1,删除所有k相关的初始化、自增语句即可。

之前直接将j初始值固定写为1会出现逻辑错误,是因为违背了该排序逻辑的核心规则:每轮外层循环确定i位置的排序结果后,下一轮内层循环不需要回头比较i之前的元素,必须从i的下一位开始向后遍历,否则会打乱已经排好序的元素位置,导致结果错误。

修正后可正常运行的代码如下:

i := 0;

while i < 4 do
begin
    j := i + 1;
    while j < 5 do
    begin
        if nArray[j] < nArray[i] then
        begin
            tmp := nArray[j];
            nArray[j] := nArray[i];
            nArray[i] := tmp;
        end;
        j := j + 1;
    end;
    i := i + 1;
end;

逐轮核对运行逻辑和原带k的代码完全一致:

  • 第1轮外层循环i=0,j初始值为1,匹配原代码k=1的运行效果
  • 第1轮内层循环结束后i自增为1,下一轮j初始值为2,匹配原代码k自增为2的运行效果
  • 后续轮次j初始值依次为3、4,和原逻辑完全匹配,不会出现j被反复重置为1导致的循环逻辑错误、排序结果错误问题
  • 代码全程仅使用i、j、tmp三个变量,保持两层while嵌套结构,未调用任何函数,完全满足作业要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 13:09:16