Probabilmente dovrei iniziare dicendo che sia quicksort che mergesort possono funzionare bene se non è possibile inserire tutto in memoria contemporaneamente. È possibile implementare quicksort scegliendo un pivot, quindi trasferendo gli elementi dal disco in memoria e scrivendo gli elementi in uno di due file diversi in base a come tale elemento si confronta con il pivot. Se si utilizza una coda con priorità doppia, è possibile farlo in modo ancora più efficiente inserendo il numero massimo di elementi possibili nella memoria contemporaneamente.
Altri hanno menzionato il vantaggio che il mergesort è il caso peggiore O (n log n), che è sicuramente vero. Detto questo, puoi facilmente modificare quicksort per produrre l'algoritmo introsort, un ibrido tra quicksort, insertion sort e heapsort, che è il caso peggiore O (n log n) ma mantiene la velocità di quicksort nella maggior parte dei casi.
Potrebbe essere utile capire perché quicksort è in genere più veloce di un mergesort, poiché se si comprendono i motivi è possibile trovare rapidamente alcuni casi in cui il mergesort è un chiaro vincitore. Quicksort solito è meglio che mergesort per due ragioni:
Quicksort ha una migliore frazione di riferimento rispetto Mergesort, il che significa che gli accessi effettuati in quicksort sono di solito più veloce rispetto ai corrispondenti accessi in mergesort.
Quicksort utilizza la peggiore memoria O (log n) (se implementata correttamente), mentre mergesort richiede O (n) memoria a causa del sovraccarico di fusione.
C'è uno scenario, però, dove questi vantaggi scompaiono. Supponiamo di voler ordinare un elenco di elementi collegati. Gli elementi della lista collegata sono sparsi per tutta la memoria, quindi il vantaggio (1) scompare (non esiste una località di riferimento). In secondo luogo, le liste collegate possono essere unite con solo overhead di spazio O (1) invece di overhead di spazio O (n), quindi il vantaggio (2) scompare. Di conseguenza, di solito scoprirai che il mergesort è un algoritmo superiore per l'ordinamento di liste concatenate, poiché fa meno confronti totali e non è suscettibile di una scarsa scelta di pivot.
Spero che questo aiuti!
Duplicate imo: [perché-è-Quicksort-better-than-Mergesort] (http://stackoverflow.com/questions/70402/why-is-quicksort-better-than-mergesort) – Manu