有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Heapify为minheap提供了不正确的输出

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

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

output = 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);
    }
}

这就是我如何构建min-heap

heapSize = nRandomNumbers.length;

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

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

谢谢


共 (1) 个答案

  1. # 1 楼答案

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