In un corso di algoritmi standard ci viene insegnato che quicksort è in media e nel peggiore dei casi. Allo stesso tempo, vengono studiati altri algoritmi di ordinamento che sono nel peggiore dei casi (come mergesort e heapsort ), e persino il tempo lineare nel migliore dei casi (come bubblesort ) ma con qualche necessità aggiuntiva di memoria.O ( n 2 ) O ( n registro n )
Dopo una rapida occhiata ad alcuni altri tempi di esecuzione , è naturale dire che quicksort non dovrebbe essere efficiente come altri.
Inoltre, considera che gli studenti imparano nei corsi di programmazione di base che la ricorsione non è davvero buona in generale perché potrebbe usare troppa memoria, ecc. Pertanto (e anche se questo non è un vero argomento), questo dà l'idea che Quicksort potrebbe non essere davvero buono perché è un algoritmo ricorsivo.
Perché, quindi, quicksort supera in pratica altri algoritmi di ordinamento? Ha a che fare con la struttura dei dati del mondo reale ? Ha a che fare con il modo in cui la memoria funziona nei computer? So che alcuni ricordi sono molto più veloci di altri, ma non so se questo è il vero motivo di questa performance contro-intuitiva (rispetto alle stime teoriche).
Aggiornamento 1: una risposta canonica sta dicendo che le costanti coinvolte nella del caso medio sono più piccole delle costanti coinvolte in altri algoritmi . Tuttavia, devo ancora vedere una giustificazione adeguata di ciò, con calcoli precisi anziché solo idee intuitive.O ( n registro n )
In ogni caso, sembra che la vera differenza si verifichi, come suggeriscono alcune risposte, a livello di memoria, in cui le implementazioni sfruttano la struttura interna dei computer, utilizzando, ad esempio, che la memoria cache è più veloce della RAM. La discussione è già interessante, ma mi piacerebbe comunque vedere maggiori dettagli riguardo alla gestione della memoria, poiché sembra che la risposta abbia a che fare con essa.
Aggiornamento 2: Esistono diverse pagine Web che offrono un confronto tra algoritmi di ordinamento, alcuni più elaborati di altri (in particolare sorting-algorithms.com ). Oltre a presentare un valido aiuto visivo, questo approccio non risponde alla mia domanda.