Junior — Middle
È possibile implementare un algoritmo di ordinamento che non utilizza memoria aggiuntiva per i dati intermedi?
sobes.tech AI
Risposta dell'AI
Sì, esistono algoritmi di ordinamento che non utilizzano memoria aggiuntiva per memorizzare dati intermedi — sono chiamati algoritmi in-place.
Esempi di tali algoritmi:
- Bubble Sort (Ordinamento a bolle)
- Insertion Sort (Ordinamento per inserimento)
- Selection Sort (Ordinamento per selezione)
- Quick Sort (Ordinamento rapido) — con un'implementazione accurata
- Heap Sort (Ordinamento a heap)
Questi algoritmi modificano direttamente l'ordine degli elementi nell'array originale, senza allocare memoria aggiuntiva per copie o strutture ausiliarie.
Esempio di quick sort in-place in Java:
public 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);
}
}
private 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++;
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
int temp = arr[i + 1];
arr[i + 1] = arr[high];
arr[high] = temp;
return i + 1;
}
In questo modo, gli ordinamenti in-place consentono di risparmiare memoria, anche se a volte possono essere più lenti o meno stabili rispetto a quelli che utilizzano memoria aggiuntiva.