private void PercolateDown(int hole) { PriorityQueueElement obj = data[hole]; while ((hole * 2 + 1) < data.Count) { int child = hole * 2 + 1; if (child != data.Count - 1) { if (data[child + 1].CompareTo(data[child]) < 0) { child++; } } PriorityQueueElement childObj = data[child]; if (childObj.CompareTo(obj) < 0) { data[hole] = childObj; childObj.PQIndex = hole; hole = child; } else { break; } } data[hole] = obj; obj.PQIndex = hole; }
public void Insert(PriorityQueueElement obj) { int hole = data.Count; data.Add(obj); while (hole>0 && obj.CompareTo(data[(hole-1)/2])<0) { data[hole] = data[(hole-1)/2]; data[hole].PQIndex = hole; hole = (hole-1) / 2; } data[hole] = obj; obj.PQIndex = hole; }
public void Insert(PriorityQueueElement obj) { int hole = data.Count; data.Add(obj); while (hole > 0 && obj.CompareTo(data[(hole - 1) / 2]) < 0) { data[hole] = data[(hole - 1) / 2]; data[hole].PQIndex = hole; hole = (hole - 1) / 2; } data[hole] = obj; obj.PQIndex = hole; }
private void PercolateUp(int hole) { PriorityQueueElement obj = data[hole]; while (hole > 0 && obj.CompareTo(data[(hole - 1) / 2]) < 0) { int parent = (hole - 1) / 2; PriorityQueueElement parentObj = data[parent]; data[hole] = data[parent]; parentObj.PQIndex = hole; hole = parent; } data[hole] = obj; obj.PQIndex = hole; }