Quicksort non si comporta bene su piccoli input, perché c'è una grande possibilità che il pivot venga scelto male (non una mediana di tutti gli elementi ordinati). Quindi, Heapsort o anche Insertion sort viene in genere utilizzato per array di dimensioni.
Da qui deriva un'altra applicazione di heapsort - Intosort . Introsort è un algoritmo di ordinamento, che combina punti di forza sia di quicksort che di heapsort. I grandi array vengono ordinati usando quicksort, ma quando viene raggiunto il limite di profondità previsto - log2n - l'algoritmo passa a heapsort.
Direi che se la complessità O (n log2n) non è necessaria per essere garantita, che quicksort è (quasi) sempre usato, perché è in media più veloce ed è un algoritmo di libreria ampiamente utilizzato. Se vuoi migliorare il comportamento di Quicksort, lo usi in combinazione con Heapsort. E solo quando si deve garantire O (n log2n), le implementazioni usano semplicemente heapsort.