Quick Sort è uno degli algoritmi di ordinamento più potenti e usati in informatica, famoso per la sua efficienza e semplicità.
Si basa sul principio del "divide et impera", dividendo l’array in sottosequenze più piccole da ordinare.
L'idea principale è scegliere un pivot (di solito l’ultimo elemento), e poi riordinare gli altri elementi in modo che quelli minori del pivot vadano a sinistra e quelli maggiori a destra.
Dopo questa suddivisione, Quick Sort viene applicato ricorsivamente a ciascuna delle due parti.
Questo metodo è particolarmente efficace perché riduce drasticamente il numero di confronti richiesti rispetto ad altri algoritmi come il Bubble Sort o Selection Sort.
Inoltre, è un algoritmo in-place, cioè non richiede memoria aggiuntiva significativa.
Grazie a queste qualità, Quick Sort è spesso la scelta ideale per l’ordinamento di grandi volumi di dati.
2. Codice in linguaggio C:
Ecco una classica implementazione in C di Quick Sort. Questo esempio mostra sia la funzione di ordinamento ricorsiva che la funzione di partizionamento:
void quickSort(int arr[], int low, int high) {
if (low < high) {
int pi = partition(arr, low, high);
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}
}
int partition(int arr[], int low, int high) {
int pivot = arr[high];
int i = (low - 1);
for (int j = low; j < high; j++) {
if (arr[j] < pivot) {
i++;
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i + 1], &arr[high]);
return (i + 1);
}
La funzione partition è fondamentale: organizza i valori attorno al pivot e restituisce l’indice corretto del pivot. Questo indice è poi usato per applicare il quickSort alle due metà dell’array.
3. Esempio pratico:
Supponiamo di voler ordinare questo array: [8, 4, 7, 3, 10, 2, 6]
Questo esempio dimostra come l'algoritmo riduca progressivamente il problema in sotto-array ordinati, ottenendo il risultato in modo rapido.
4. Analisi dell’algoritmo:
- Complessità media: O(n log n), ottima per la maggior parte dei dati reali.
- Complessità peggiore: O(n²), solo in casi sfortunati (es. array già ordinato senza pivot casuale).
- Complessità spaziale: O(log n) grazie all’uso di ricorsione.
- Stabilità: Non è stabile, cioè elementi uguali possono cambiare posizione.
- Uso pratico: Quick Sort è usato in molte librerie standard grazie alla sua velocità, come in C++, Java e Python.
In sintesi, è uno degli algoritmi più importanti da conoscere e comprendere nella programmazione e nell’informatica.