Troisième article d'une série de cinq présentant différentes méthodes de tri. Nous expliquons ici la méthode dite du "tri dichotomique". Toutes ces procédures seront téléchargeables avec l'interface de comparaison (article 5).
Programmation > Visual Basic
Recherche :   
Actualité Système Salon Concours Outils Programmation Devparadise Programmation HTML .Net JavaScript VBScript ASP PHP Visual Basic Perl Java Active X SQL XML WAP Delphi Graphisme Flash Web Design Promotion Référencement Publicité Valeur de votre site Outils Systèmes Windows Unix Linux Benchmark Hardware Réseaux locaux Droit Sécurité
Tri dichotomique
  Auteur : Eric PETIT

Troisième article d'une série de cinq présentant différentes méthodes de tri. Nous expliquons ici la méthode dite du "tri dichotomique". Toutes ces procédures seront téléchargeables avec l'interface de comparaison (article 5).

Publicité 
   Troisième article d'une série de cinq présentant différentes méthodes de tri. Nous expliquons ici la méthode dite du "tri dichotomique". Toutes ces procédures seront téléchargeables avec l'interface de comparaison (article 5).

Rappelons les cinq méthodes étudiées dans ces articles:

Le tri dichotomique :

   Les explications sont données pour le tri croissant.

   Le principe est simple, on prend l'élément N du tableau, et on le compare aux éléments 1 à N - 1 du même tableau. On en déduit la position M qu'il devrait occupé et on décale tous les éléments M à N - 1 (ex: M prend la position M + 1) puis on place l'élément de dépard à la position M.
   On effectue cette opération pour tous les éléments de 2 jusqu'à Nb_élément.

Source:

Sub Tri_Dichotomique(ByVal Nb_Element As Long, Tableau() As Variant, ByVal Sens As Boolean)

    ' le paramètre Nb_Element correspond au nombre d'éléments du tableau, sa valeur n'est donc pas modifiée
    ' le paramètre Tableau() est le tableau à trier, il est modifié puis retourné
    ' le paramètre Sens est vrai pour un tri croissant

    Dim P As Long
    ' P représente la position à laquelle il faut placer l'élément à classé
    Dim I As Long
    Dim J As Long
    ' I et J sont des variables intermédiaires utilisées pour les compteurs de boucles
    Dim Ligne_Tampon As Variant
    ' Ligne_Tampon est une variable intermédiaire utilisée pour la permutation d'éléments

    ' On effectue l'opération pour tous les éléments
    For I = 2 To Nb_Element

      If (Tableau(I) < Tableau(I - 1) And Sens) Or (Tableau(I) > Tableau(I - 1) And Not Sens) Then

        ' Si l'élément I est supérieur à l'élément 1
        ' alors il faut déterminer sa place
        ' Sinon l'élément I doit prendre la première place
        If (Tableau(I) > Tableau(1) And Sens) Or (Tableau(I) < Tableau(1) And Not Sens) Then
          P = DichoPlacer(I, Tableau(), Sens)
        Else
          P = 1
        End If

        ' Décalage du tableau
        Ligne_Tampon = Tableau(I)
        For J = I To P + 1 Step -1

          Tableau(J) = Tableau(J - 1)
        Next J
        Tableau(P) = Ligne_Tampon
      End If
    Next I
End Sub

Private Function DichoPlacer(I As Long, Tableau() As Variant, ByVal Sens As Boolean) As Long

    ' le paramètre I représente la position de l'élément à classé
    ' le paramètre Tableau() est le tableau à trier, il est modifié puis retourné
    ' le paramètre Sens est vrai pour un tri croissant
    ' DichoPlacer renvoi la nouvelle position de l'élément à classer

    Dim inf As Long
    Dim sup As Long
    Dim milieu As Long

    inf = 1
    sup = I - 1

    Do While inf <> sup

      milieu = (inf + sup) \ 2
      If (Tableau(milieu) <= Tableau(I) And Sens) Or (Tableau(milieu) >= Tableau(I) And Not Sens) Then
        inf = milieu + 1
      Else
        sup = milieu
      End If
    Loop

    DichoPlacer = inf

End Function

A lire aussi sur Devparadise.com :
  • Contrôleur d'attributs
  • Bien maîtriser son référencement
  • Positionnement d’un DIV.
  • Création d’un diagramme circulaire en PERL.
  • Création d’un histogramme 3D en PERL pour Windows.
  • A télécharger aussi sur Devparadise.com :
  • Téléchargez gratuitement ASP.NET Web Matrix
  • Contrôleur d'attributs
  • Contrôleur d'attributs (Source VB)
  • Profiler.cgi 2.01
  • Firefly 1.0.2

  • © 1997-2005 tous droits réservés Devparadise.com
    Les logos, et marques déposées sont la propriété de leurs détenteurs respectifs.
    Devparadise.com s'est engagé à respecter la confidentialité des données personnelles régies par la loi 78-17 du 6 janvier 1978.
    Déclaration C.N.I.L. n° 621623
    tri,dichotomique