- int tailPos = this.heapList.Count - 1;
- if (tailPos != 0)
- {
- //down heap
- T tail = this.heapList[tailPos];
- int currentPos = 0;
- while (true)
- {
- int childPos = currentPos * 2 + 1; //left child
- if (childPos >= tailPos) break;
- T child = this.heapList[childPos];
-
- int rChiledPos = childPos + 1; //right child
- if (rChiledPos < tailPos)
- {
- T rChiled = this.heapList[rChiledPos];
- if (child.CompareTo(rChiled) > 0)
- {
- child = rChiled;
- childPos = rChiledPos;
- }
- }
-
- if (tail.CompareTo(child) < 0) break;
-
- this.heapList[currentPos] = child; //up
- currentPos = childPos;
- }
- this.heapList[currentPos] = tail; //commit
- }
- this.heapList.RemoveAt(tailPos);