gpt4 book ai didi

algorithm - 简单代码及操作挑战(附图)

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:45:27 31 4
gpt4 key购买 nike

我遇到了以下伪代码。这里 A 是一个整数数组:

for i = 1 to n 
{
j = i; f = 1;

while ((j>1) and (f==1))
{
if (A[j]<A[j/2]) { swap(A[i], A[j/2]); j = j/2; }
else { f = 0; }
}
}

我不明白为什么 A 的最小元素总是进入 A[1]

事实上我有一个问题,这段代码如何改变A[1]?或者至少如果我正确理解这段代码的操作?

最佳答案

即使不清楚整数除法应该如何工作(3/2 == 13/2 == 2 ?)算法将始终移动数组第一个位置的最小值。

例如对于组成为 {4,5,6,2} 的数组,最后一个元素将首先移动到第二个位置并进行第一次交换(j==4i==4) 导致这种情况:{4,2,6,5}。当 j 将更新为 j/2 --> 2 时,数组 2 的第二个元素将与索引中的一个进行比较j/2 --> 1 并移动到第一个位置。这里出现了 split 的问题。

除法 1/2 表示风险,因为它可以转换为 0 导致调用 A[0] 并且导致 ArrayOutOfBoundException,但这是伪代码,如果您将除法的结果四舍五入,它就可以工作。

关于algorithm - 简单代码及操作挑战(附图),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25681698/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com