Questa funzione prende in input il vettore a e due indici primo e ultimo che puntano alla porzione di vettore da considerare effettivamente. Per la condizione posta sulla linea 128 la funzione opera solo se primo e ultimo sono diversi, cioè se il vettore ha almeno due elementi: In tal caso si richiama la funzione a partiziona(...) indicando la porzione di vettore da ordinare.
La funzione partiziona() restituirà l'indice del perno all'interno del (sub)vettore considerato, dopo aver posto a sinistra del perno tutti gli elementi minori di a[p] e a destra del perno tutti gli elementi maggiori di a[p]. Nella figura accanto il perno è mostrato in rosso, l'altro elemento di confronto in verde (cioè a[dx] se il perno sta a sinistra oppure a[sx] se il perno sta a destra). Le righe contrassegnate da << sono quelle in cui avviene lo scambio di posizione tra a[p] e l'altro elemento. Si noti come gli elementi colorati si avvicinano fino a quando il perno iniziale 52 non trova la sua posizione stabile: a quel punto il partizionamento è fatto con tutti gli elementi più piccoli di 52 alla sua sinistra e tutti gli elementi più grandi alla sua destra.
Perciò sarà possibile richiamare la funzione quicksort() con le 2 porzioni di vettore in cui è stato diviso il (sub)vettore iniziale.
Attenzione La funzione quicksort() è un esempio di funzione ricorsiva, cioè una funzione che richiama se stessa; la condizione (primo < ultimo) della linea 128 è di fondamentale importanza per evitare la ricorsione infinita: quando primo diventa uguale a ultimo, cioè quando il (sub)vettore è ridotto ad un solo elemento, il processo di ricorsione termina.