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(通过直接检查或通过您的方法的逻辑)
我正在为学校开发 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(通过直接检查或通过您的方法的逻辑)