Alguem tem cód p/ ordenar crescentemente array de inteiros?

Delphi

02/02/2004

Pessoal

Alguem tem um código pronto para me arranjar, que ordene de forma crescente uma array de números inteiros?

Muito Obrigado,
Ari Marcolino.


Ari Marcolino

Ari Marcolino

Curtidas 0

Respostas

Maicongabriel

Maicongabriel

02/02/2004

Defina um array, exemplo
var
  V    : array[1..10] of Integer;

Jogue alguns valores para o array [b:273b2fe5de]V[/b:273b2fe5de]
  V[1] := 9;
  V[2] := 6;
  V[3] := 3;
  V[4] := 8;
  V[5] := 5;
  V[6] := 2;
  V[7] := 7;
  V[8] := 4;
  V[9] := 1;
  V[10] := 0;

Defina algumas outras variaveis de trabalho
var 
  i,j,x,k : integer;

Código da [b:273b2fe5de]Ordenação[/b:273b2fe5de]
  for i := 1 to 10 -1 do
  begin
    k := i;
    x := v[i];
    for j := i+1 to 10 do
    begin
      if v[j] < x then
      begin
        k := j;
        x := v[k];
      end;
    end;
    v[k] := v[i];
    v[i] := x;
  end;

E para ver o resultado pode jogar para um ListBox por Exemplo
  for I := 1 to 10 do
  begin
    ListBox1.Items.Add(IntToStr(V[i]));
  end;



GOSTEI 0
Aroldo Zanela

Aroldo Zanela

02/02/2004

Colega,

Algoritmo QuickSort:

procedure TQuickSort.Sort(var A: array of Integer);

  procedure QuickSort(var A: array of Integer; iLo, iHi: Integer);
  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
        VisualSwap(A[Lo], A[Hi], Lo, Hi);
        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);
    if Terminated then Exit;
  end;

begin
  QuickSort(A, Low(A), High(A));
end;



GOSTEI 0
Leitorbinario

Leitorbinario

02/02/2004

[quote:71dbafb06c=´Aroldo Zanela´]Colega,

Algoritmo QuickSort:

procedure TQuickSort.Sort(var A: array of Integer);

  procedure QuickSort(var A: array of Integer; iLo, iHi: Integer);
  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
        VisualSwap(A[Lo], A[Hi], Lo, Hi);
        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);
    if Terminated then Exit;
  end;

begin
  QuickSort(A, Low(A), High(A));
end;
[/quote:71dbafb06c]


Alguém conseguiu fazer esté codigo functionar? Alguem tem um exemplo pronto de como ordenar um array de inteiros com o quicksort?


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

02/02/2004

Colega,

Na época, copiei o algoritmo incompleto. Segue o link para o original (em inglês):

http://www.drbob42.com/uk-bug/hood-04.htm


GOSTEI 0
Leitorbinario

Leitorbinario

02/02/2004

ok, já consegui fazer.

Outra pergunta, qual o mais rápido de todos os algoritmos de ordenação?


GOSTEI 0
Night_man

Night_man

02/02/2004

O quickSort eh o mais rapido de todos,

mas como uma quandidade pequena de valores uns 100, a bolha fica melhor... Como ela eh mais simples exige menos da maquina...


GOSTEI 0
POSTAR