Sciences de l'informatique
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

Sciences de l'informatique

Bienvenue dans notre forum de partage et d'échange d'information technique dans le domaine NTIC (Informatique, Programmation, Réseau, Multimédia), ce forum est destinée à tous les élèves Tunisiens
 
AccueilDernières imagesS'enregistrerConnexion
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Derniers sujets
» Cours sur les fichiers
Tri de Shell Icon_minitime1Lun 2 Mai - 13:32 par kaouther

» série révision finale
Tri de Shell Icon_minitime1Ven 15 Avr - 2:32 par Dhifallah Fethi

» Conversion de nombre décimal vers un nombre binaire
Tri de Shell Icon_minitime1Mar 29 Mar - 2:27 par Dhifallah Fethi

» Divisibilité par 5 (Algoritmes arithmétiques)
Tri de Shell Icon_minitime1Mar 29 Mar - 2:24 par Dhifallah Fethi

» Divisibilité par 4 (Algoritmes arithmétiques)
Tri de Shell Icon_minitime1Mar 29 Mar - 2:18 par Dhifallah Fethi

» Série enregestrement et fichier avec corection
Tri de Shell Icon_minitime1Mar 29 Mar - 1:30 par Dhifallah Fethi

» Exercice 8 (Algorithmes récurrents)
Tri de Shell Icon_minitime1Lun 28 Mar - 2:34 par Dhifallah Fethi

» Exercice 7 (Algorithmes récurrents)
Tri de Shell Icon_minitime1Lun 28 Mar - 2:23 par Dhifallah Fethi

» Exercice 6 (Algorithmes récurrents)
Tri de Shell Icon_minitime1Lun 28 Mar - 2:18 par Dhifallah Fethi

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Avril 2024
LunMarMerJeuVenSamDim
1234567
891011121314
15161718192021
22232425262728
2930     
CalendrierCalendrier
Qui est en ligne ?
Il y a en tout 2 utilisateurs en ligne :: 0 Enregistré, 0 Invisible et 2 Invités

Aucun

Le record du nombre d'utilisateurs en ligne est de 6 le Ven 13 Jan - 2:22

 

 Tri de Shell

Aller en bas 
AuteurMessage
Dhifallah Fethi
Admin
Dhifallah Fethi


Messages : 74
Date d'inscription : 02/03/2011

Tri de Shell Empty
MessageSujet: Tri de Shell   Tri de Shell Icon_minitime1Mer 2 Mar - 21:30

Tri de Shell


Le tri de Shell ou Shell Sort en anglais est un algorithme de tri. C'est une amélioration notable du tri par insertion au niveau de la vitesse d'exécution mais ce tri n'est pas stable. Il est facile de comprendre intuitivement comment fonctionne cet algorithme mais il est difficile de calculer son temps d'exécution.
Le nom vient de son inventeur Donald Shell (en) (né en 1924) qui publia l'algorithme dans le numéro de juillet 1959 de Communications of the ACM.

Fonctionnement

Le tri de Shell est une amélioration du tri par insertion en observant deux choses:
• Le tri par insertion est efficace si la liste est à peu près triée. (1)
• Le tri par insertion est inefficace en moyenne car il ne déplace les valeurs que d'une position par instruction. (2)
Le tri de Shell trie chaque liste d'éléments séparés de n positions chacun avec le tri par insertion. L'algorithme effectue plusieurs fois cette opération en diminuant n jusqu'à n=1 ce qui équivaut à trier tous les éléments ensemble.
Le fait de commencer avec des éléments espacés permet de pallier l'inconvénient (2), tandis que lorsque l'on fait à la fin avec un espacement de 1, ce qui est en fait un tri par insertion ordinaire, on tire parti de l'avantage (1).

Dans l'exemple ci-dessous, on a choisi successivement 4, 2 et 1 comme distances séparant les éléments à trier à chaque étape et on obtient:

le vecteur à trier est:
1 2 3 4 5 6 7 8 9

6 5 4 9 1 7 8 3 2


Indiquons le éléments à trier en rouge (de numéros 1, 5 et 9 distants de 4)
1 2 3 4 5 6 7 8 9

6 5 4 9 1 7 8 3 2


On obtient :
1 2 3 4 5 6 7 8 9

1 5 4 9 2 7 8 3 6


Il faut maintenant trier les éléments de numéro 2 et 6 (toujours distants de 4)
1 2 3 4 5 6 7 8 9

1 5 4 9 2 7 8 3 6


On obtient:
1 2 3 4 5 6 7 8 9

1 5 4 9 2 7 8 3 6


Il faut maintenant trier les éléments de numéro 3 et 7 (toujours distants de 4)
1 2 3 4 5 6 7 8 9

1 5 4 9 2 7 8 3 6


On obtient
1 2 3 4 5 6 7 8 9

1 5 4 9 2 7 8 3 6



Il faut maintenant trier les éléments de numéro 4 et 8
1 2 3 4 5 6 7 8 9

1 5 4 9 2 7 8 3 6


On obtient
1 2 3 4 5 6 7 8 9

1 5 4 3 2 7 8 9 6


Il faut maintenant trier les éléments de numéro 5 et 9
1 2 3 4 5 6 7 8 9

1 5 4 9 2 7 8 3 6

On obtient
1 2 3 4 5 6 7 8 9

1 5 4 3 2 7 8 9 6


Dans une deuxième phase, on va trier les éléments dont les numéros ont un écart de 2: 1, 3, 5, 7, 9
1 2 3 4 5 6 7 8 9

1 5 4 3 2 7 8 9 6


On obtient
1 2 3 4 5 6 7 8 9

1 5 2 3 4 7 6 9 8


Ceux de numéros 2, 4, 6, 8
1 2 3 4 5 6 7 8 9

1 5 2 3 4 7 6 9 8


On obtient
1 2 3 4 5 6 7 8 9

1 3 2 5 4 7 6 9 8


Dans une troisième phase, on va trier les éléments dont les numéros ont un écart de 1, à savoir 1, 2, 3, ..., 9 On obtient
1 2 3 4 5 6 7 8 9

1 2 3 4 5 6 7 8 9


Note: Dans la pratique, on choisit souvent ..., 10, 7, 4, 1 comme écarts entre les éléments à trier à chaque étape.
Et Donald Knuth suggère lui de choisir comme écart:

p0=0
P1=3*P0+1
pi =3*Pi-1 +1
et de prendre P tel que P<N

Animation du tri de Shell


[Vous devez être inscrit et connecté pour voir ce lien]

Téléchargement de l'animation
Taille: 98.63 KB
[Vous devez être inscrit et connecté pour voir ce lien]

Code en Pascal:(mode itérative)


Code:
procedure shell(var t:tab; n:integer);
var aux,j,i,p:integer;
begin
  p:=0  ;
  while (p<N) do
    p:=(3*p+1);
  while (p>1)do
  begin
    p:=p div 3;
    for i := p to n do
      begin
        aux:=t[i];
        j:=i;
        while(j>p) and(t[j-p] >aux) do
          begin
            t[j] := t[j-p];
            j:=j-p;

          end;
        t[j]:=aux;
      end;
    end;
end;

Code en Pascal:(mode récursive)

Code:
Procedure shell (Var t: TAB; n: integer);
Var aux,i : integer;
begin
        If n > 1 Then
            begin
                  shell (t,n - 1);
                  If t[n] < t[n - 1] Then
                  Begin
                    aux:= t[n];
                    i := n;
                    Repeat
                        t[i] := t[i - 1];
                        i := i - 1;
                    Until (i = 1) Or (aux > t[i - 1]);
                    t[i] := aux;
                  End;
                  end;
                  end;
Revenir en haut Aller en bas
https://ntic.yoo7.com
 
Tri de Shell
Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Sciences de l'informatique :: 4ème SI :: Programmation :: Cours-
Sauter vers: