public PrioElem Pop() { PrioElem result = arr[0]; arr[0] = arr[arr.Count - 1]; arr.RemoveAt(arr.Count - 1); int i = 0; while (true) { int minidx = i; if (2 * i + 1 < arr.Count && arr[2 * i + 1].time < arr[minidx].time) { minidx = 2 * i + 1; } if (2 * i + 2 < arr.Count && arr[2 * i + 2].time < arr[minidx].time) { minidx = 2 * i + 2; } if (minidx == i) { break; } PrioElem t = arr[i]; arr[i] = arr[minidx]; arr[minidx] = t; i = minidx; } return(result); }
public void Add(PrioElem elm) { int i = arr.Count; arr.Add(elm); while (i > 0 && arr[(i - 1) / 2].time > elm.time) { PrioElem t = arr[(i - 1) / 2]; arr[(i - 1) / 2] = arr[i]; arr[i] = t; i = (i - 1) / 2; } }