C# 中的 MinHeap 实现

MinHeap implementation in c#

我正在为学校开发 MinHeap 实现,但遇到了一个问题。该代码通常运行良好,但有时会在我的 heapify 方法中生成参数超出范围异常。我试图找出问题所在,但我是一个糟糕的调试器。

这是我的函数代码:

    private void Heapify(int i)
    {
        int least;
        int leftchild = 2 * (i + 1) - 1;
        int rightchild = 2 * (i + 1);

        if (leftchild < heap.Count &&  (heap[rightchild].CompareTo(heap[i]) < 0))
        {
            least = 1;
        }
        else
        {
            least = i;
        }

        if (rightchild < heap.Count && (heap[rightchild].CompareTo(heap[least]) < 0))
        {
            least = rightchild;
        }

        if (least != i)
        {
            T temp = heap[i];
            heap[i] = heap[least];
            heap[least] = temp;
            this.Heapify(least);
        }
if (leftchild < heap.Count &&  (heap[rightchild].CompareTo(heap[i]) < 0))

如果rightchild >= heap.Count,这会给你一个例外。

超出范围的异常通常很容易追踪。基本上,您必须确保每当您通过索引访问数组中的项目时,所述数组的计数/长度大于索引。换句话说,确保在每次调用 heap[#index] 时,#index < heap.Count(通过直接检查或通过您的方法的逻辑)