private void TrickleDown(int lastHeapIndex) { _IsHeapOrdered = false; int currentHeapIndex = 0; do { int originalHeapIndex = currentHeapIndex; int childHeapIndex1 = (currentHeapIndex << 1) + 1; int childHeapIndex2 = childHeapIndex1 + 1; if (lastHeapIndex > childHeapIndex1 && HeapEntry.Compare(_HeapEntries[currentHeapIndex], _HeapEntries[childHeapIndex1]) > 0) { currentHeapIndex = childHeapIndex1; } if (lastHeapIndex > childHeapIndex2 && HeapEntry.Compare(_HeapEntries[currentHeapIndex], _HeapEntries[childHeapIndex2]) > 0) { currentHeapIndex = childHeapIndex2; } if (currentHeapIndex == originalHeapIndex) { break; } SwapHeapPositions(currentHeapIndex, originalHeapIndex); } while (true); }
private int TrickleUp(int heapIndex) { while (heapIndex > 0) { int parentHeapIndex = (heapIndex - 1) >> 1; if (HeapEntry.Compare(_HeapEntries[heapIndex], _HeapEntries[parentHeapIndex]) < 0) { _IsHeapOrdered = false; SwapHeapPositions(heapIndex, parentHeapIndex); heapIndex = parentHeapIndex; } else { break; } } return(heapIndex); }