Home • ECDL • Algoritmi • Java • Basi di dati • Seconda prova • Eccetera • Cerca nel sito

Selection Sort

Precedente
SUPERIORE
Successiva

Utilizzando l'algoritmo per la posizione del minimo si può individuare il minimo e scambiarlo con il valore in 1° posizione. Si ripete l'operazione con il sottovettore con indice da 2 a N, da 3 a N, ... e ogni elemento andrà al posto che gli spetta.

Procedure SELESORT_1(var V: Vettore; N: Integer);
var
   PosMin, i, j: Integer;
begin
   for i:=1 to N-1 do
      begin
         PosMin:=i;
         for j:=i+1 to N do
            if(V[j] < V[PosMin]) then
               PosMin:=j;
         SCAMBIA(V[i], V[PosMin]);
      end;
end;

Rispetto al bubble sort l'elemento scambiato occuperà definitivamente la posizione i-esima: il numero di scambi? (N-1).

Esempio

V={40, 35, 20, 15}, i=1, j=2..4 --> PosMin=4, V={15, 35, 20, 40}
V={15, 35, 20, 40}, i=2, j=3..4 --> PosMin=3, V={15, 20, 35, 40}
V={15, 20, 35, 40}, i=3, j=4..4 --> PosMin=3, V={15, 20, 35, 40}

Si può diminuire il numero di scambi, a scapito di un if()then aggiuntivo...

Procedure SELESORT_2(var V: Vettore; N: Integer);
var
   PosMin, i, j: Integer;
begin
   for i:=1 to N-1 do
      begin
         PosMin:=i;
         for j:=i+1 to N do
            if(V[j] < V[PosMin]) then
               PosMin:=j;
         if(PosMin <> i) then
            SCAMBIA(V[i], V[PosMin]);
      end;
end;

Selection Sort - ApPuNtIdIuNiNfOrMaTiCo

Home • ECDL • Algoritmi • Java • Basi di dati • Seconda prova • Eccetera • Cerca nel sito

Precedente
SUPERIORE
Successiva