Mai e poi mai scegliere un perno fisso - questo può essere attaccato a sfruttare del vostro algoritmo caso peggiore O (n ^ 2) tempo di esecuzione, che è solo in cerca di guai. caso runtime peggiore di quicksort verifica quando partizionamento risultati in una matrice di 1 dell'elemento, ed una matrice di n-1 elementi. Supponiamo di scegliere il primo elemento come la partizione. Se qualcuno nutre un array per l'algoritmo che è in ordine decrescente, il vostro primo perno sarà il più grande, in modo da tutto il resto nella matrice si sposterà a sinistra di esso. Poi, quando si ricorsione, il primo elemento sarà il più grande di nuovo, quindi ancora una volta si mette tutto a sinistra di esso, e così via.
Una tecnica migliore è la mediana-di-3 metodo, in cui si sceglie tre elementi in modo casuale, e scegliere il mezzo. Voi sapete che l'elemento che si sceglie non sarà il primo o l'ultimo, ma anche, per il teorema del limite centrale, la distribuzione del elemento centrale sarà normale, il che significa che si tende verso la metà (e quindi , n lg n tempo).
Se si vuole assolutamente garantire O (nlgn) runtime per l'algoritmo, il metodo colonne-of-5 per trovare la mediana di un array viene eseguito in O (n), il che significa che l'equazione di ricorrenza per Quicksort nel peggiore dei casi sarà essere T (n) = O (n) (per la mediana) + O (n) (partizione) + 2T (n / 2) (Recurse a sinistra ea destra.) Con il teorema, questo è O (n lg n) . Tuttavia, il fattore costante sarà enorme, e se peggiore performance caso è la preoccupazione principale, utilizzare un merge sort, invece, che è solo un po 'più lento rispetto Quicksort, in media, e garantisce O (nlgn) il tempo (e sarà molto più veloce di questo quicksort mediana zoppo).
Spiegazione della mediana della Algorithm mediane