private void Swap(int index1, int index2) { HeapNode <T> temp = _data[index1]; _data[index1] = _data[index2]; _data[index2] = temp; if (!_hash.ContainsKey(_data[index1].Key)) { _hash.Add(_data[index1].Key, index1); } else { _hash[_data[index1].Key] = index1; } if (!_hash.ContainsKey(_data[index2].Key)) { _hash.Add(_data[index2].Key, index2); } else { _hash[_data[index2].Key] = index2; } }
public HeapNode <T> ExtractHeapNode() { if (_data.Count == 0) { return(null); } HeapNode <T> min = _data[0]; _data[0] = _data[_data.Count - 1]; _data.RemoveAt(_data.Count - 1); _hash.Remove(min.Key); MinHeapify(0, _data.Count - 1); return(min); }