QUICKSORT … un breve ripasso! Andrea Prevete, LASD 2004-05
IF b<p THEN Quicksort(b, p-1, k, A) La procedura ricorsiva Quicksort ordina il segmento dell’array A definito dagli indici rispettivamente inferiore e superiore b e t, finchè la lunghezza del suddetto segmento non è inferiore ad un valore fissato k – nel qual caso il compito è demandato ad una procedura di ordinamento light PROC Quicksort(b, t, k, A) IF (t-b) < k THEN Sort(b, t, A) ELSE p <- Pivot(b,t,A) IF b<p THEN Quicksort(b, p-1, k, A) IF p<t THEN Quicksort(p+1, t, k, A) ENDIF ENDPROC Andrea Prevete, LASD 2004-05
Ad ogni attivazione Quicksort richiama la funzione Pivot che restituisce alla fine del processo un indice in corrispondenza del quale A ha un valore >= di tutti gli elementi alla sua sinistra e <= di tutti quelli alla sua destra. Attenzione! Perché Pivot funzioni correttamente – così come qui implementata – è necessario estendere l’array di partenza con un elemento in coda di valore non inferiore ad alcuno degli elementi da ordinare. FUNCTION Pivot(b, t, A) p <- b b <- b+1 WHILE b<= t WHILE A[b] < A[p] b <- b+1 WHILE A[t] > A[p] t <- t-1 IF b<t THEN SWAP(A[b], A[t]) t <- t-1 ENDIF ENDW SWAP(A[p], A[t]) RETURN t ENDFUN Andrea Prevete, LASD 2004-05