W standardowym kursie z algorytmów uczymy się, że quicksort wynosi średnio a O ( n 2 ) w najgorszym przypadku. Jednocześnie badane są inne algorytmy sortowania, które w najgorszym przypadku to O ( n log n ) (np. Scalesort i heapsort ), a nawet czas liniowy w najlepszym przypadku (np. Bąbelkowy ), ale z pewnymi dodatkowymi potrzebami pamięci.
Po szybkim spojrzeniu na dłuższe czasy działania można oczywiście powiedzieć, że Quicksort nie powinien być tak wydajny jak inne.
Weź również pod uwagę, że uczniowie uczą się podczas podstawowych kursów programowania, że rekursja nie jest ogólnie dobra, ponieważ mogłaby zużyć zbyt dużo pamięci itp. Dlatego (i chociaż nie jest to prawdziwy argument), daje to wyobrażenie, że Quicksort może nie być naprawdę dobrze, ponieważ jest to algorytm rekurencyjny.
Dlaczego zatem Quicksort przewyższa inne algorytmy sortowania w praktyce? Czy ma to związek ze strukturą rzeczywistych danych ? Czy ma to związek ze sposobem działania pamięci w komputerach? Wiem, że niektóre wspomnienia są znacznie szybsze od innych, ale nie wiem, czy to jest prawdziwy powód tego sprzecznego z intuicją działania (w porównaniu z teoretycznymi szacunkami).
Aktualizacja 1: kanoniczna odpowiedź mówi, że stałe zaangażowane w średniego przypadku są mniejsze niż stałe zaangażowane w inne algorytmy O ( n log n ) . Jednak nie widziałem jeszcze właściwego uzasadnienia tego, z dokładnymi obliczeniami zamiast tylko intuicyjnych pomysłów.
W każdym razie wydaje się, że występuje prawdziwa różnica, jak sugerują niektóre odpowiedzi, na poziomie pamięci, gdzie implementacje wykorzystują wewnętrzną strukturę komputerów, wykorzystując na przykład, że pamięć podręczna jest szybsza niż pamięć RAM. Dyskusja jest już ciekawe, ale jeszcze bym chciał zobaczyć więcej szczegółów w odniesieniu do zarządzania pamięcią, ponieważ wydaje się, że odpowiedź ma z nim zrobić.
Aktualizacja 2: Istnieje kilka stron internetowych oferujących porównanie algorytmów sortowania, niektóre z nich są bardziej wyszukane niż inne (w szczególności sorting-algorithms.com ). Takie podejście, poza przedstawieniem ładnej pomocy wizualnej, nie odpowiada na moje pytanie.