W ramach zadania domowego obejmującego implementację introsortu jestem pytany, dlaczego stosuje się heapsort zamiast scalesort (lub inne algorytmy w tym zakresie).
Introsort to hybrydowy algorytm sortowania, który zapewnia zarówno szybką średnią wydajność, jak i (asymptotycznie) optymalną wydajność w najgorszym przypadku. Zaczyna się od szybkiego sortowania i przełącza się na heapsort, gdy głębokość rekurencji przekracza poziom oparty na (logarytmie) liczby sortowanych elementów. ( Wikipedia , pobrano 2014-maj-06).
Jedynym powodem, dla którego mogę wymyślić, jest to, że heapsort jest „na swoim miejscu” ... Ale tak naprawdę nie rozumiem, dlaczego miałoby to tutaj znaczenie.
algorithms
algorithm-analysis
sorting
użytkownik672009
źródło
źródło
Odpowiedzi:
Dwie wady szybkiego sortowania polegają na tym, że wymaga ono dodatkowej przestrzeni (aby zachować nieposortowane interwały), a zły wybór osi przestawnej (lub wymyślone sekwencje mające na celu wybranie złej osi obrotu) może spowodować, że będzie to algorytm czasu i dodatkowej przestrzeni.O ( logn ) O (n2)) O ( n )
Przełączenie na stos rozsypisk, gdy głębokość rekurencji staje się zbyt duża (w okolicach ) oznacza, że mamy zagwarantowane górne ograniczenie, czyli czas i dodatkowe miejsce.logn O ( n logn ) O(logn)
Wymagane dodatkowe miejsce Heapsort powoduje, że lepszym wyborem jest scalsort, w którym dla zaprojektowanej tablicy może być jeszcze duże.O(1) O(n) n
Powodem, dla którego heapsort nie jest używany do pełnego sortowania, jest to, że jest wolniejszy niż Quicksort (częściowo z powodu ukrytych stałych w dużym wyrażeniu O, a częściowo zachowania w pamięci podręcznej)
źródło