Arrays - ordenando array numerico

Top  Previous  Next

// Ordena uma matriz numérica

procedure QuickSort(var A: array of Integer; const iLo, iHi: Integer); <-- Não tire os 2 ultimos parametros!!

var

  Lo, Hi, Mid, T: Integer;

begin

  Lo := iLo;

  Hi := iHi;

  Mid := A[(Lo + Hi) div 2];

  repeat

    while A[Lo] < Mid do Inc(Lo);

    while A[Hi] > Mid do Dec(Hi);

    if Lo <= Hi then

    begin

      T     := A[Lo];

      A[Lo] := A[Hi];

      A[Hi] := T;

      Inc(Lo);

      Dec(Hi);

    end;

  until Lo > Hi;

  if Hi > iLo then QuickSort(A, iLo, Hi);

  if Lo < iHi then QuickSort(A, Lo, iHi);

end;

 

 

// exemplo:

 

procedure TForm1.Button1Click(Sender: TObject);

var

  X: array of Integer;

begin

  Setlength(X, 10);

  X[0] := 5;

  X[1] := 100;

  X[2] := 25;

  X[3] := 75;

  X[4] := 0;

  X[5] := 40;

  X[6] := 80;

  X[7] := 22;

  X[8] := 50;

  X[9] := 1;

 

  QuickSort(X, Low(X), High(X));

  Caption := 'X';

end;

 

Para impedir repeticao de valores (remover repetidos) veja a dica "Arrays - Removendo valores repetidos"