2015-06-03 2 views
0

Я работаю над реализацией MinHeap для школы, и я столкнулся с проблемой. Код обычно хорошо работает, но иногда генерирует исключение из диапазона исключений из моего метода heapify. Я попытался изолировать проблему, но я ужасный отладчик.Реализация MinHeap в C#

Вот мой код функции:

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

ответ

0

Исключительные исключения, как правило, легко отследить. В принципе, вы должны убедиться, что всякий раз, когда вы обращаетесь к элементу в массиве с помощью индексов, подсчет/длина указанного массива больше, чем индекс. Другими словами, убедитесь, что в каждом вызове кучи [#index], #index < heap.Count (либо путем прямой проверки или логики вашего метода)

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

Если rightchild >= heap.Count, это даст вам исключение.

Смежные вопросы