La cosa fondamentale qui è riconoscere che l'algoritmo deve prendere scorciatoie per evitare di dover confrontare ogni elemento con ogni altro elemento (che risulterebbe in un algoritmo O (N ^ 2)) ma solo per alcuni degli altri elementi e per farlo di nuovo quando si ordinano questi elementi. Questo è il motivo per cui "dividere il lavoro in pile e gestire ciascuna di queste pile dividendolo in pile e gestire ciascuna di queste pile ecc." Finisce con la complessità di O (N log N).
La parte difficile è scegliere quegli elementi e gestire il lavoro con questi elementi. Scegliere è difficile perché devi scegliere bene per ottenere le subpile ugualmente dimensionate. Gestire è difficile perché non si può passare troppo tempo a spostare le cose se si desidera un algoritmo veloce.
Ad esempio, QuickSort funziona scegliendo un elemento (tradizionalmente chiamato "pivot") e divide il lavoro in due pile. Uno con elementi più piccoli del perno e l'altro più grande. Quindi quicksort ogni pila, e unire le due pile ordinate indietro. Se il pivot è l'elemento più piccolo ogni volta, si finisce con un sotto-mucchio vuoto e un subpile grande con tutti gli elementi tranne il pivot. Ciò provocherà il peggior caso di O (N ^ 2). Se scegli bene, ottieni sub-pali di medie dimensioni e un tempo di esecuzione di O (N log N).
Quindi un modo tipico per scegliere il pivot è di guardare tre valori scelti a caso dalla pila e scegliere quello nel mezzo. Ciò evita almeno il sotto-mucchio vuoto.