Nie rozumiem, dlaczego heapsort jest uważany za algorytm sortowania w miejscu .
Mam na myśli dodatkową strukturę danych zapełnioną elementami tablicy do sortowania, tj. Stertę, która jest używana do pomocy w wydobyciu wartości minimalnej i procesie sortowania.
Może więc nie rozumiem tutaj definicji miejsca na miejscu?
Ale na przykład rodzaj wstawiania jest oczywisty, że jest to algorytm zastępczy, tj. Nie jest wymagana dodatkowa pamięć dla elementów.
Więc dlaczego uważa się to za miejsce?
źródło
Być może brakuje ci podstawowego zrozumienia, że do określenia układu drzewa można użyć tablicy.
Załóżmy, że masz drzewo binarne, a węzeł wewnętrzny znajduje się w indeksie i tablicy. Następnie indeks tablicy rodzica i potomków tego węzła można znaleźć:
Widzieć:
http://www.personal.kent.edu/~rmuhamma/Alameterms/MyAlgorithms/Sorting/heapSort.htm
Ponieważ stertę można przechowywać i organizować w całości w tablicy, heapsort może działać w miejscu, przesuwając elementy wewnątrz tablicy wejściowej. Rzeczywiście, sterta jest budowana i przetwarzana przy użyciu oryginalnej tablicy wejściowej.
źródło
Jeśli, jak mówisz, naprawdę potrzebna jest dodatkowa struktura do zbudowania sterty, wówczas heapsort rzeczywiście NIE byłby algorytmem sortowania w miejscu.
Tak jednak nie jest. Możesz zbudować stertę na tej samej tablicy, którą chcesz posortować, a następnie zastosować algorytm heapsort, aby sortować na miejscu.
źródło
Wikipedia - algorytm lokalny
źródło
Uważa się, że jest na miejscu, ponieważ jego wymagania dotyczące miejsca są znikome (stałe lub wcale, jeśli używasz operacji bitowych do zamiany przedmiotów). Na przykład MergeSort nie istnieje, ponieważ zestaw danych wejściowych nie jest modyfikowany w każdej iteracji przykładu wyszukiwania.
Najlepszym sposobem zilustrowania różnic między algorytmami lokalnymi i algorytmami zewnętrznymi jest prawdopodobnie sprawdzenie następującego kodu odwracającego łańcuch C / C ++, który to robi (z K&R):
Jeśli na przykład odczytujesz łańcuch wejściowy od końca i umieszczasz znaki w innym buforze, byłby to algorytm odwracania łańcucha na nie na miejscu.
źródło