void SiftDown(int n) { Guess v = heap[n]; for (var n2 = n * 2; n2 < Count; n = n2, n2 *= 2) { if (n2 + 1 < Count && heap[n2 + 1].p < heap[n2].p) { n2++; } if (v.p <= heap[n2].p) { break; } heap[n] = heap[n2]; } heap[n] = v; }
public void Push(Guess v) { if (Count >= heap.Length) Array.Resize(ref heap, Count * 2); heap[Count] = v; SiftUp(Count++); }