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).
Véase también
Comunidad de asistencia y consejos.
El artículo original fue escrito por
ZOUARI. Traducido por
Carlos-vialfa.