Sobes.tech
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.