back to top

Selection sort in Java

Il Selection Sort รจ un algoritmo di ordinamento decisamente semplice ed intuitivo. L’idea di base si fonda nel selezionare ad ogni iterazione l’i-esimo valore piรน piccolo e sostituirlo con quello che, in quel momento, occupa l’i-esima posizione nel vettore.

In altre parole, alla prima iterazione verrร  selezionato il valore piรน piccolo dell’intero array e sarร  scambiato con il valore che occupa la prima posizione. Alla seconda iterazione, il secondo valore piรน piccolo sarร  scambiato con il valore in seconda posizione, e cosรฌ via fino a quando tutti gli elementi del vettore non saranno collocati nella loro giusta posizione.

Pubblicitร 

Implementazione dell’algoritmo Selection Sort in Java

Vediamo ora un’implementazione dell’algoritmo Selection Sort in Java:

public void selectionSort(int [] array) {
    for(int i = 0; i < array.length-1; i++) {
        int minimo = i; // Partiamo dall' i-esimo elemento
        for(int j = i+1; j < array.length; j++) {
            // Qui avviene la selezione; ogni volta
            // che nell'iterazione troviamo un elemento piรน piccolo di minimo
            // aggiorniamo minimo all'elemento trovato
            if(array[minimo] > array[j]) {
                minimo = j;
            }
        }
        // Se minimo รจ diverso dall'elemento di partenza,
        // allora avviene lo scambio
        if(minimo != i) { 
            int k = array[minimo];
            array[minimo] = array[i];
            array[i] = k;
        }
    }
}

La complessitร  del Selection Sort risulta quadratica, sia nel caso peggiore, medio e migliore. Il numero di confronti รจ O(nยฒ) in ogni caso. Mentre il numero di scambi รจ lineare O(n) nel caso peggiore e medio, ed รจ costante O(1) nel caso migliore. Questa caratteristica lo rende meno efficace su grandi dataset rispetto ad altri algoritmi di ordinamento come Quick Sort o Merge Sort.

Considerazioni e Vantaggi del Selection Sort

Nonostante la sua semplicitร , il Selection Sort presenta alcuni vantaggi:

  • รˆ facile da capire e implementare.
  • Non richiede memoria ausiliaria, in quanto funziona in-place.
  • รˆ utile per data set di dimensioni ridotte.
  • รˆ stabile in alcune implementazioni, a seconda della gestione degli scambi.

Tuttavia, per dataset piรน grandi e per applicazioni che richiedono efficienza, รจ consigliabile considerare algoritmi piรน performanti, come il Merge Sort o il Quick Sort, che hanno una complessitร  media di O(n log n).

Pubblicitร 
Articolo precedente
Articolo successivo