L’Insertion Sort รจ un algoritmo di ordinamento semplice e efficace, noto per il suo approccio intuitivo che ricalca il modo in cui le persone solitamente ordinano un mazzo di carte. Questo algoritmo รจ particolarmente utile per ordinamenti di piccole dimensioni o per dati giร parzialmente ordinati.
Come Funziona l’Insertion Sort
Il funzionamento dell’Insertion Sort รจ basato su un sistema di inserzione progressiva. Dato un array di n elementi, il processo prevede che vengano effettuate n-1 iterazioni. Durante ogni iterazione i, si considera l’elemento i-esimo e si cerca la sua posizione corretta all’interno della porzione giร ordinata del vettore, che va da 0 a i-1. Questo avviene attraverso una serie di scambi:
In questo modo, la porzione del vettore da 0 a i risulterร sempre ordinata, fino a quando, dopo n iterazioni, l’intero vettore sarร completamente ordinato.
Implementazione dell’Insertion Sort in Java
Di seguito รจ riportata l’implementazione dell’algoritmo Insertion Sort in Java:
public void insertionSort(int [] array) {
for(int i = 1; i < array.length; i++) {
int x = i;
int j = i - 1;
while (j >= 0 && array[j] > array[x]) {
// Scambiamo l'elemento in posizione x fino a quando non raggiunge
// la posizione corretta nel sotto-vettore
int k = array[x];
array[x] = array[j];
array[j] = k;
x = j; // La sua nuova posizione nel sotto-vettore
j--; // Procediamo al successivo elemento del sotto-vettore
}
}
}
Complessitร Temporale
La complessitร dell’algoritmo รจ O(nยฒ) nel caso peggiore e medio, mentre nel caso migliore, quando gli elementi sono giร ordinati o quasi ordinati, la complessitร รจ O(n). Questo rende l’Insertion Sort un algoritmo efficiente per array di piccole dimensioni o giร parzialmente ordinati.
Quando Utilizzare l’Insertion Sort
L’Insertion Sort รจ consigliato in diverse situazioni, tra cui:
- Nell’ordinamento di piccole liste o array.
- Quando si lavora con dati giร parzialmente ordinati.
- In combinazione con altri algoritmi, come il Merge Sort o il Quick Sort, per ottimizzare le prestazioni in caso di piccole sottoliste.
In conclusione, l’Insertion Sort รจ un algoritmo fondamentale che, sebbene non sia il piรน efficiente, ha il suo posto nell’arsenale degli algoritmi di ordinamento, specialmente in contesti specifici e applicazioni pratiche.