Questo è un repost di una domanda su cs.SE di Janoma . Crediti completi e vende a lui o cSE.
In un corso sugli algoritmi standard ci viene insegnato che quicksort è O (n log n) in media e O (n²) nel caso peggiore. Allo stesso tempo, vengono studiati altri algoritmi di ordinamento che sono O (n log n) nel peggiore dei casi (come mergesort e heapsort ), e anche il tempo lineare nel migliore dei casi caso (come bubblesort ) ma con alcune esigenze aggiuntive di memoria.
Dopo una rapida occhiata a alcuni altri tempi di esecuzione è naturale dire che quicksort non dovrebbe essere efficiente quanto gli altri.
Inoltre, considera che gli studenti imparano nei corsi di programmazione di base che la ricorsione non è molto buona in generale perché potrebbe usare troppa memoria, ecc. Quindi (e anche se questo non è un argomento reale), questo dà l'idea che quicksort potrebbe non essere veramente buono perché è un algoritmo ricorsivo.
Perché, quindi, quicksort supera in pratica gli altri algoritmi di ordinamento? Ha a che fare con la struttura di 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 prestazione controintuitiva (se confrontata con le stime teoriche).