我对伪代码有点新意。我理解代码说的是什么,但很难把各个部分放在一起。我应该如何思考这段代码的作用:
假设a1,a2 ,. 。 。 ,ak是一个k数组。以下是什么 代码片段呢?简要解释原因。假设所有的缩进行 属于循环内部。
1 for p := 1 to ⌊k/2⌋
2 t := ap
3 ap := ak−p+1
4 ak−p+1 := t
答案 0 :(得分:2)
Ookay,
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
元素,另一个是 {{1 - 结尾的一个。
所以,总结一下:
您将p
- 第一个与n
- 最后一个数组值交换到数组的一半。然后呢? 数组颠倒。
请注意,您的伪代码格式看起来很奇怪 - 而且最重要的是 - 模糊不清。
n
是等同于ak-p+1
还是a[k-p+1]
或a[k]-p+1
?如果没有,你是如何表达其他的。
首先,我会将此代码转换为Python的实际源代码,这样更容易阅读。
修改强>
I)嗯,正如您发布的那样,数组范围从a[k-p]+1
到a1
。
II)考虑如何交换两个变量(ak
和a
)的值:
b
当然,由于您在行 2 中用1 temp := a
2 a := b
3 b := temp
覆盖了a
,因此您必须将旧b
值存储在临时值中,即{ {1}}。
答案 1 :(得分:0)
循环将数组镜像到其中心元素,因为它用[k-p + 1]改变[p],其中[p]总是在数组的“左”侧,并且[k-p +1]始终在“右侧”。 t是一个临时变量。