Uprzejmie donoszę, że w przesympatycznym artykule "Wybrane algorytmy i struktury danych. część 2" wkradł się mały chochlik w implementacji kopca, a dokładnie metody usuwającej element:
public int Remove(int index)
{
if (index <= 0 || index >= data.Count)
throw new ArgumentOutOfRangeException(nameof(index));
int result = data[index];
data[index] = data[data.Count - 1];
data.RemoveAt(data.Count - 1);
if (data.Count > 1)
{
int nextElement = 1; // jest
//int nextElement = index // powinno być
int element;
do
{
element = nextElement;
nextElement = Heapify(element);
}
while (nextElement != element);
}
Co można sprawdzić na przykład uruchamiając kod na przykładowym kopcu z artykułu.
Pozdrawiam