{ File: ordsel.pas }

{ Scopo: ordinamento di un vettore per selezione del minimo }

{ E` richiesta la definizione preliminare di:

const
  NumElementi = ...;

type
  TipoElemento = ...;
  TipoIndice   = 1..NumElementi;
  TipoVettore  = array [TipoIndice] of TipoElemento;

}

procedure SelectionSort (var A: TipoVettore);
{ Ordina il vettore A usando l'algoritmo di ordinamento per selezione del
  minimo. }

var
  i, j, i_min : TipoIndice;
  temp        : TipoElemento;

begin { SelectionSort }
  for i := 1 to NumElementi-1 do
  begin
    i_min := i;                     { ricerca la componente minima in A[i..n] }
    for j := i+1 to NumElementi do
      if A[j] < A[i_min] then
        i_min := j;

    if i <> i_min then
    begin                           { scambia A[i_min] e A[i] }
      temp := A[i_min];
      A[i_min] := A[i];
      A[i] := temp
    end
  end
end; { SelectionSort }