public T Dequeue() { T ret = list[0]; list[0] = list[--Count]; int i = 0; while (true) { int left = (i * 2) + 1; if (left >= Count) { break; } int right = left + 1; int ind = left; if (right < Count && Comparer.Compare(list[left], list[right]) > 0) { ind = right; } if (Comparer.Compare(list[i], list[ind]) >= 0) { T tmp = list[i]; list[i] = list[ind]; list[ind] = tmp; i = ind; } } return(ret); }
public void Push(T value) { if (Count == list.Length) { T[] tmp = new T[list.Length * 2]; System.Array.Copy(list, tmp, list.Length); list = tmp; } list[Count++] = value; int i = Count - 1; while (i > 0 && Comparer.Compare(list[i], list[parent(i)]) < 0) { T tmp = list[i]; list[i] = list[parent(i)]; list[parent(i)] = tmp; i = parent(i); } }
public int Compare(T x, T y) { return(comparer.Compare(x, y)); }