To jest odpowiedź na pytanie do cs.SE autorstwa Janomy . Pełne kredyty i łupy dla niego lub cs.SE.
W standardowym kursie z algorytmów uczymy się, że quicksort wynosi średnio O (n log n) i O (n²) 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 kilka dłuższych czasów pracy jest naturalne stwierdzenie, ż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).