Sia dato un elenco di elementi numerici.
Il metodo di ordinamento basato sulla selezione è il seguente:
- Trovare il valore minimo, spostarlo nella prima posizione di un nuovo elenco e marcare la posizione dell'elemento
affinchè non venga nuovamente selezionato
- Cercare il successivo elemento minimo, spostarlo nella seconda posizione dell'elenco e marcare la sua posizione per non selezionarlo più
- continuare fino a quando si sono selezionati tutti gli elementi
In questo metodo gli elementi vengono duplicati in un secondo elenco.
Un miglioramento dell'algoritmo consiste nello spostare l'elemento selezionato nella sua posizione finale all'interno dello stesso elenco,
scambiandolo con quello che occupa quella posizione, non considerando più quella posizione nelle successive selezioni.
Il modo più semplice per non prendere più in considerazione l'elemento collocato nella sua posizione finale
consiste nello spostare gli elementi che devono occupare le posizioni estreme, cioè gli elementi massimi o gli elementi minimi.
Algoritmo di Selezione:
- Ripetere le operazioni seguenti assegnando alla variabile k i valori da N-1 a 1, con decremento di k di 1
- Ricercare il valore massimo tra gli elementi X[k], ..., X[0] annotando la sua posizione posMax
- scambia gli elementi X[posMax] e X[k].
(a questo punto gli elementi tra k e N-1 sono ordinati)
Esempio:
Ad ogni passo del ciclo vengono mostrati
- gli elementi nell'array X
- su sfondo rosso la posizione indicata dalla variabile k
- su sfondo verde la posizione indicata dallla variabile posMax
La variabile
k, quindi, ha il significato di indicare la posizione in cui collocare il massimo
e la variabile
posMax di indicare la posizione in cui è stato individuato il massimo tra gli elementi che precedono il k-mo.
Passo 1:
Elementi nell'array
X da ordinare:
Variabili:
k = 4 - posMax = 1
Si scambiano gli elementi in posizione 4 e 1.
Passo 2:
Dopo lo scambio, gli elementi nell'array
X si trovano nel seguente ordine:
Variabili:
k = 3 - posMax = 2
Si scambiano gli elementi in posizione 3 e 2.
Passo 3:
Dopo lo scambio, gli elementi nell'array
X si trovano nel seguente ordine:
Variabili:
k = 2 - posMax = 1
Si scambiano gli elementi in posizione 2 e 1.
Passo 4:
Dopo lo scambio, gli elementi nell'array
X si trovano nel seguente ordine::
Variabili:
k = 1 - posMax = 0
Si scambiano gli elementi in posizione 1 e 0.
L'algoritmo termina. Gli elementi nell'array X sono ordinati:
La funzione massimo riceve come parametro l'indice dell'ultimo elemento fino al quale cercare il massimo e restituisce la posizione del massimo.
fig. 3: Funzione di ricerca del Massimo
L'algoritmo di ordinamento per selezione, cerca il massimo e lo porta nelle ultime posizioni dell'array
fig. 4: Ordinamento per selezione