Ordenamiento Shell – Recursividad

Junio 2017


A continuación veremos un procedimiento recursivo que permite ordenar una matriz de n enteros utilizando el método de Ordenamiento Shell:
Procedure Ordenamiento_Shell_Rec (Var t: TAB; n,h : integer);
Var aux,i : integer;
begin
    If h > 0 Then
    Begin
        If n > h Then
             begin
                  Tri_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;
        Tri_Shell_Rec (t,n,h Div 3);
    End;
End;


Nota:
Probar este procedimiento con matrices de pequeño tamaño, ya que en caso contrario el numero de llamadas es considerable y se presentará un problema de desborde de la pila (el limite técnico de la recursividad es la memoria).
Se puede aumentar el tamaño de la matriz aumentando el tamaño de la pila (Opción\Compilador\Parámetros de memoria\Tamaño de la pila).

Consulta también

Publicado por Carlos-vialfa. Última actualización: 17 de noviembre de 2009 a las 16:18 por Carlos-vialfa.
El documento «Ordenamiento Shell – Recursividad» se encuentra disponible bajo una licencia Creative Commons. Puedes copiarlo o modificarlo libremente. No olvides citar a CCM (es.ccm.net) como tu fuente de información.