c#中的MinHeap实现

时间:2015-06-03 11:20:22

标签: c# heap

我正在为学校开展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);
        }

2 个答案:

答案 0 :(得分:0)

if (leftchild < heap.Count &&  (heap[rightchild].CompareTo(heap[i]) < 0))

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

答案 1 :(得分:0)

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