partiziona

La funzione partiziona() è il vero nucleo dell'intero algoritmo. Esso prende in input il vettore a e due indici sx e dx che delimitano la porzione di vettore da prendere in considerazione. Si incomincia con salvare una copia dei due indici dx e sx (linee 92-93). Alla linea 95 si dà inizio ad un ciclo iterativo che verrà ripetuto fintantoché sx é minore di dx. Si noti che, poiché sx si muove verso destra e dx si muove verso sinistra, questi due indici convergono e finiranno per diventare uguali: sarà quello il momento in cui il ciclo avrà termine e il perno si sarà stabilizzato nella sua posizione finale. Nelle linee 96-101 si sceglie come perno l'elemento puntato da sx e poi si incomincia a decrementare dx continuando fino a quando non risulta vera la condizione a[dx]<a[p]. Quando ciò si verifica si scambiano gli elementi puntati da p e da dx (linea 103).

Specularmente, nelle linee 107-112, si sceglie come perno l'elemento puntato da dx e poi si incomincia a incrementare sx continuando fino a quando non risulta vera la condizione a[sx]>a[p]. Quando ciò si verifica si scambiano gli elementi puntati da p e da sx (linea 114). Si ricomincia dalla linea 95 se sx e dx sono diversi, altrimenti il procedimento termina perché il perno ha raggiunto la posizione che gli compete. L'indice di tale posizione viene restituita alla funzione chiamante (linea 118).