private void HeapyfiToUp(int i) { if (isMin) { int father = GetFather(i); if (father > -1 && array[father].Prioridad > array[i].Prioridad) { NodoColaPHeap t = array[father]; array[father] = array[i]; array[i] = t; HeapyfiToUp(father); } } else { int father = GetFather(i); if (father > -1 && array[father].Prioridad < array[i].Prioridad) { NodoColaPHeap t = array[father]; array[father] = array[i]; array[i] = t; HeapyfiToUp(father); } } }
private void Add(NodoColaPHeap p) { if (array.Length == count) { NodoColaPHeap[] t = new NodoColaPHeap[array.Length * 2]; for (int i = 0; i < array.Length; i++) { t[i] = array[i]; } t[count] = p; array = t; } }
public void Insert(NodoColaPHeap p) { if (array.Length == count) { Add(p); } else { array[count] = p; } count++; HeapyfiToUp(count - 1); }
private void HeapyfiToDown(int i) { if (isMin) { #region HeapyFi To down Min int l = GetLeftSon(i); int r = GetRightSon(i); if (r < count) { NodoColaPHeap right = array[r]; NodoColaPHeap left = array[l]; int t; if (right != null && left != null) { t = left.Prioridad < right.Prioridad ? l : r; } else if (right != null) { t = r; } else if (left != null) { t = l; } else { return; } if (array[t].Prioridad < array[i].Prioridad) { NodoColaPHeap temp = array[t]; array[t] = array[i]; array[i] = temp; HeapyfiToDown(t); } } else if (l < count) { NodoColaPHeap left = array[l]; int t; if (left != null) { t = l; } else { return; } if (array[t].Prioridad < array[i].Prioridad) { NodoColaPHeap temp = array[t]; array[t] = array[i]; array[i] = temp; HeapyfiToDown(t); } } #endregion } else { #region HeapyFi To down NOT Min int l = GetLeftSon(i); int r = GetRightSon(i); if (r < count) { NodoColaPHeap right = array[r]; NodoColaPHeap left = array[l]; int t; if (right != null && left != null) { t = left.Prioridad > right.Prioridad ? l : r; } else if (right != null) { t = r; } else if (left != null) { t = l; } else { return; } if (array[t].Prioridad > array[i].Prioridad) { NodoColaPHeap temp = array[t]; array[t] = array[i]; array[i] = temp; HeapyfiToDown(t); } } else if (l < count) { NodoColaPHeap left = array[l]; int t; if (left != null) { t = l; } else { return; } if (array[t].Prioridad > array[i].Prioridad) { NodoColaPHeap temp = array[t]; array[t] = array[i]; array[i] = temp; HeapyfiToDown(t); } } #endregion } }