 |
Publicité
|
Premier article d'une série de cinq présentant différentes méthodes de tri. Nous expliquons ici la méthode dite du "tri à bulle". Toutes ces procédures seront téléchargeables avec l'interface de comparaison (article 5).
En effet il existe de nombreuses méthodes de tri, nous en étudierons cinq:
Ces méthodes sont plus ou moins intéressantes suivant le nombre d'éléments à trier. La méthode de Shell Metzner est un bon compromis, elle est moins rapide que le Quick Sort mais moins gourmande en ressources.
Le tri à bulle :
Les explications sont données pour le tri croissant.
Le principe comme son nom l'indique est de placer en haut du tableau les éléments les plus lourds.
Pour cela, on compare chaque élément N à celui qui lui est supérieur (dans le classement) N + 1, si cet élément N est plus importante que l'élément N +1 alors on intervertit les deux éléments.
Pour être sûr que le premier élément (qui peut être le plus lourd) puisse atteindre le haut du tableau, il faut recommencer autant de fois qu'il y a d'éléments.
Il y aura donc environ (Nombre d'éléments au carré) comparaisons à faire et dans le pire des cas autant d'inversions.
Source:
Sub Tri_A_Bulles(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 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 autant de fois qu'il y a d'éléments
For I = 1 To Nb_Element - 1
' Chaque élément est comparé à celui qui lui est supérieur dans le classement
For J = 1 To Nb_Element - I
If (Tableau(J) > Tableau(J + 1) And Sens) Or (Tableau(J) < Tableau(J + 1) And Not Sens) Then
' l'élément J est plus important que l'élément J + 1 alors on les intervertit
Ligne_Tampon = Tableau(J)
Tableau(J) = Tableau(J + 1)
Tableau(J + 1) = Ligne_Tampon
End If
Next J
Next I
End Sub
|