Ordenamiento Shell – Recursividad

Haz una pregunta

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).

Pascal - Ordenación por inserción
Desplazar los elementos de una matriz (Rotación) – Recursividad