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

使用AlgoBuild实现排序时出现数组索引越界错误,原因何在?

问题分析与解决方案

你的问题出在数组索引的起始和范围不匹配:

核心矛盾

  • 输入阶段,数组V是按**0-based(从0开始)**填充的:FOR i = 0; i < D; i = i + 1,所以V的有效索引是0到D-1,共D个元素。
  • 但排序阶段的循环却用了**1-based(从1开始)**的索引范围:
    • 外层循环FOR i = 1; i <= D; i = i + 1,当i=D时,k=i=D,已经超出数组最大索引D-1;
    • 内层循环FOR j = i + 1; j <= D; j = j + 1,当i=D-1时,j=D,访问V[j]就是访问V[D],直接触发索引越界错误。

你提到“已将k赋值为j”,但j本身已经是超出数组有效范围的索引,所以k跟着变成无效值,自然会报错。

修正后的伪代码

把排序循环的索引逻辑改成和输入阶段一致的0-based:

PROGRAM main
    INPUT int D
    FOR i = 0; i < D; i = i + 1
        INPUT V[i]
    END FOR
    // 修改排序循环的索引范围为0到D-2
    FOR i = 0; i < D - 1; i = i + 1
        k = i
        // 内层循环从i+1到D-1
        FOR j = i + 1; j < D; j = j + 1
            IF V[k] > V[j]
                k = j
            END IF
        END FOR
        IF i != k
            temp = V[i]
            V[i] = V[k]
            V[k] = temp
        END IF
    END FOR
    FOR i = 0; i < D; i = i + 1
        OUTLN V[i]
    END FOR
END

其他可选修正

如果你习惯用1-based索引,需要在输入阶段就调整为从1开始填充数组:

PROGRAM main
    INPUT int D
    // 输入循环改为从1到D
    FOR i = 1; i <= D; i = i + 1
        INPUT V[i]
    END FOR
    FOR i = 1; i <= D; i = i + 1
        k = i
        FOR j = i + 1; j <= D; j = j + 1
            IF V[k] > V[j]
                k = j
            END IF
        END FOR
        IF i != k
            temp = V[i]
            V[i] = V[k]
            V[k] = temp
        END IF
    END FOR
    // 输出循环也改为从1到D
    FOR i = 1; i <= D; i = i + 1
        OUTLN V[i]
    END FOR
END

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 02:22:42