Ordenação Shell - recursividade

Fevereiro 2017


Veja um procedimento recursivo para classificar uma tabela de números inteiros, utilizando o método de ordenação Shell:

Procedimento Ordenação_Shell_Rec (Var t: TAB; n,h : integer);     
Var aux,i : integer;     
begin     
    If h > 0 Then     
    Begin     
        If n > h Then     
             begin     
                  Ordenação_Shell_Rec (t,n - h,h);     
                  If t[n] < t[n - h] Then     
                  Begin     
                     aux:= t[n];     
                     i := n;     
                     Repeat                             
                        t[i] := t[i - h];     
                        i := i - h;     
                     Until (i = h) Or (aux > t[i - h]);     
                     t[i] := aux;     
                  End;     
              End;     
        Ordenação_Shell_Rec (t,n,h Div 3);     
    End;     
End;


Observações:

Teste esse procedimento em tabelas pequenas se não, o número de chamadas aumentará demais e você terá problemas com a pilha (o limite técnico de recursividade é a memória).
Pode-se aumentar o tamanho da tabela teste, aumentando o tamanho da pilha (Opção\Compilador\Configurações da memória\Tamanho da pilha)


Tradução feita por Lucia Maurity y Nouira

Veja também

Artigo original publicado por . Tradução feita por pintuda. Última modificação: 12 de janeiro de 2012 às 17:30 por pintuda.
Este documento, intitulado 'Ordenação Shell - recursividade', está disponível sob a licença Creative Commons. Você pode copiar e/ou modificar o conteúdo desta página com base nas condições estipuladas pela licença. Não se esqueça de creditar o CCM (br.ccm.net) ao utilizar este artigo.