我正在使用 AlgoBuild 制作一个对数字进行排序的程序。
这是我的尝试:
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
,它就会超出范围。我的错误是什么?
您的第二个和第三个循环允许它们的循环变量等于
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
通过这两个修复,它应该可以工作。