Tri Shell -Recursive-

Décembre 2016


Voici une procédure récursive qui permet de trier un tableau de n entiers en utilisant la méthode de tri Shell :

Procedure Tri_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;

Remarques:

Tester cette procédure sur des tableaux de petites tailles, car si n'est pas le cas le nombre des appels devient important et en aura le problème de débordement de la pile (la limite technique de la récursivité est la mémoire).
On peut augmenter la taille du tableau test on augmentant la taille de la pile (Option\Compilateur\Paramètres mémoire\Taille pile)

A voir également :

Ce document intitulé «  Tri Shell -Recursive-  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.