Tri de nombres

Contenu du snippet

Sub QSort(t() As Long, Deb As Long, Fin As Long)
'TRI QUICKSORT RECURSSIF (TRI RAPIDE)

'Déclaration des variables
Dim i As Long         'indice
Dim j As Long         'indice
Dim X As Long         'valeur pivot
Dim Temp As Long      'Valeur temporaire


'Algo Tri
i = Deb   'sauve le début
j = Fin    'sauve la fin
X = t((i + j) \ 2)  'valeur pivot

Do
  Do While t(i) < X: i = i + 1: Loop 'recherche par la bas
  Do While t(j) > X: j = j - 1: Loop 'recherche par le haut

  If i <= j Then
    Temp = t(i)     'inversion t(i) et t(j)
    t(i) = t(j)
    t(j) = Temp
    i = i + 1       'Passe au suivant
    j = j - 1
  End If

Loop Until i > j

If j > Deb Then QSort t(), Deb, j   'trie par le bas
If i < Fin Then QSort t(), i, Fin   'trie par le haut

End Sub



Sub Test_Tri()
'PROGRAMME DE TEST 

'Nb D'ELEMENTS
Dim Nb As Long
Nb = 10000

'Déclarations
ReDim Tableau(Nb) As Long
Dim t As Long
Dim temps As Single

'LISTE ALEATOIRE
Randomize Timer
For t = 0 To Nb
Tableau(t) = Int(Rnd * Nb)
Next t

'LANCE TEST
temps = Timer
QSort Tableau(), 0, UBound(Tableau)
Debug.Print Timer - temps

End

'Vérification du tri
For t = 0 To Nb
    If t Mod 10 = 0 Then Debug.Print
    Debug.Print Tableau(t);
Next t

End Sub




Compatibilité : VB6, VBA

Disponible dans d'autres langages :

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.