使用 AlgoBuild 进行排序。为什么我会收到索引超出范围错误?

问题描述 投票:0回答:1

我正在使用 AlgoBuild 制作一个对数字进行排序的程序。

这是我的尝试:

enter image description here

AlgoBuild 将此图表转换为以下伪代码:

PROGRAM main
    INPUT int D
    FOR i = 0; 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
    FOR i = 0; i < D; i = i + 1
        OUTLN V[i]
    END FOR
END

运行时,出现以下错误:

IF 错误:数组索引超出范围 IN V[k] > V[j]

我没想到会出现这个错误。

我不明白为什么如果我分配

k
等于
j
,它就会超出范围。我的错误是什么?

arrays algorithm sorting indexing
1个回答
0
投票

您的第二个和第三个循环允许它们的循环变量等于

D
,但您尚未定义
V[D]
,因此这将超出范围。

数组索引从 0 开始,因此,如果数组

D
中有
V
个值,第一个是
V[0]
,最后一个是
V[D-1]
,而不是
V[D]

因此将中间循环中的

<= D
更改为
< D
,如下所示:

i = 0; i < D; i = i + 1

j = j + 1; j < D; j = j + 1

通过这两个修复,它应该可以工作。

© www.soinside.com 2019 - 2024. All rights reserved.