我对伪代码有点陌生。我明白代码在说什么,但很难把这些部分放在一起。我应该如何思考才能理解这段代码在做什么:
假设 a1, a2, . . . , ak 是一个由 k 个数字组成的数组。以下代码片段有什么作用?简要说明原因。假设所有缩进的行都属于循环内。
1 for p := 1 to ⌊k/2⌋
2 t := ap
3 ap := ak−p+1
4 ak−p+1 := t
我对伪代码有点陌生。我明白代码在说什么,但很难把这些部分放在一起。我应该如何思考才能理解这段代码在做什么:
假设 a1, a2, . . . , ak 是一个由 k 个数字组成的数组。以下代码片段有什么作用?简要说明原因。假设所有缩进的行都属于循环内。
1 for p := 1 to ⌊k/2⌋
2 t := ap
3 ap := ak−p+1
4 ak−p+1 := t
好的,
1 for p := 1 to ⌊k/2⌋
意味着,我们将上升到数组的一半。
2 t := ap
3 ap := ak−p+1
4 ak−p+1 := t
这种模式可以被识别为“与临时交换t
”。什么是交换的?
好吧,ap
一个ak-p+1
是p
数组 start中的第一个元素,另一个p
是 end中的第一个元素。
所以,总结一下:
n
您将-th first 与-th last 数组值交换到n
数组的一半。然后呢?数组颠倒了。
请注意,您的伪代码格式看起来很奇怪——而且,最重要的是——模棱两可。
ak-p+1
等于a[k-p+1]
or等于a[k]-p+1
or ? a[k-p]+1
如果不是,你是如何表达其他的。
因此,首先,我将把这段代码转换为像 Python 这样的实际源代码,这样更容易阅读。
编辑.
I)好吧,正如您发布的那样,数组的范围从a1
到ak
。
II) 想一想如何交换两个变量 (a
和b
) 的值:
1 temp := a
2 a := b
3 b := temp
当然,由于您在第2行覆盖a
了,因此您必须将旧值存储在一个临时值中,即.b
a
temp
循环将数组镜像到其中心元素,因为它将 a[p] 更改为 a[k-p+1],其中 a[p] 始终位于数组的“左侧”,而 a[k-p+1]总是在“正确”的一边。t 是一个临时变量。