gpt4 book ai didi

java - Heapify 给我的最小堆输出不正确

转载 作者:行者123 更新时间:2023-12-02 05:02:40 26 4
gpt4 key购买 nike

我正在尝试构建一个最小堆,但未能获得正确的结果。我不确定可能出了什么问题。

输入 = 209 97 298 54 110 27 250 455 139 181 446 206 478 90 88

输出 = 27 54 97 88 110 206 90 209 139 181 446 298 478 250 455

如您所见,90 不应该是 97 的右子节点...

这是我的代码:

static void Heapify( int nIndex )
{
int nLeftIndex = GetLeft(nIndex); //2*nIndex
int nRightIndex = GetRight(nIndex);//2*nIndex+1
int nSmallest;

if(heapSize > nLeftIndex && nHeap[nLeftIndex] < nHeap[nIndex])
nSmallest = nLeftIndex;
else
nSmallest = nIndex;

if(heapSize > nRightIndex && nHeap[nRightIndex] < nHeap[nSmallest])
nSmallest = nRightIndex;

if(nSmallest != nIndex){
swap(nHeap, nIndex, nSmallest);
Heapify(nSmallest);
}
}

这就是我构建最小堆的方式:

heapSize = nRandomNumbers.length;

//GetParentIndex() returns n / 2 and HeapSize = 15

for(int i = GetParentIndex(heapSize - 1); i >= 0; i--){
Heapify(i);
}

谢谢

最佳答案

如果使用从零开始的索引,子级索引应为 2 * i + 1 和 2 * i + 2(父级索引应为 (i - 1)/2)。

关于java - Heapify 给我的最小堆输出不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28100756/

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