Ordenação de Numeros (avançado)

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
rcoelho_6
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 18
Registrado em: Ter, 04 Nov 2008 1:56 pm
Localização: SP - são Paulo

Pessoal, o codigo abaixo cria, popula e ordena um array de numeros. Ele está funcionando, mas para ordenar (procedure reorder) eu só consegui fazer-lo utilizando dois loops.

alguém sabe algum algoritimo de ordenação que utilize apenas um loop para ordenar os numeros?

Selecionar tudo

declare
  --
  type r_premrec is record (chave number);
  type t_premrec is table of r_premrec index by binary_integer;
  v_arraym t_premrec;
  --
  --function 
  procedure reorder(p_arraym in out t_premrec) is 
  --return t_premrec is
    v_arraux t_premrec;
    v_aux    number;
  begin
    --v_arraux := p_arraym;
    --
    for i in 1..p_arraym.count loop
      for j in i..p_arraym.count loop
        if p_arraym(i).chave > p_arraym(j).chave then
          v_aux := p_arraym(i).chave;
          p_arraym(i).chave := p_arraym(j).chave;
          p_arraym(j).chave := v_aux;
        end if;
      end loop;
    end loop;
    --
    --p_arraym := v_arraux;
    --return v_arraux;
  end;
  --
begin
  for i in 1..100 loop
    v_arraym(i).chave := round(dbms_random.value*10);
  end loop;
  --
  --v_arraym := reorder(v_arraym);
  reorder(v_arraym);
  --
  for i in 1..v_arraym.count loop
    dbms_output.put_line(v_arraym(i).chave);
  end loop;
end;
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Hmmm.. você quer um algoritmo de ordenação de complexidade de (n), linear...
Com um LOOP apenas* não existe.
Existem outros algoritmos que você pode verificar em:
http://pt.wikipedia.org/wiki/Algoritmo_ ... %A7%C3%A3o

O que você está utilizando é o famoso Bubble sort(método bolha). Ele SEMPRE fará a ordenação em n². Existem variações dele que melhora, como o "bolha com flag".
No entanto, existem outros que são bem mais rápidos como o famoso QUICKSORT.

Não sei para o que você precisa mas o melhor mesmo é o "ORDER BY", hehehehe.
rcoelho_6
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 18
Registrado em: Ter, 04 Nov 2008 1:56 pm
Localização: SP - são Paulo

O order by não serve porque não estou trabalhando com tabelas e nem consigo criar uma tabela dinamica aqui.
Mas vou estudar os outros algoritimos de sort. Talvez tenha algum melhor que esse.
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

COM CERTEZA tem algorítmos melhores que o bolha, aqueles outros lá "sofisticados", por exemplo.
Encontrei também exmplos de ordenação utilizando collections. Acredito que você pode se aproveitar:
http://www.oracle-developer.net/display.php?id=428
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante