OVH Cloud OVH Cloud

Algorithme de tri

3 réponses
Avatar
Jean-Luc HOAREAU
Bonjour à tous
J'utilise, comme vous certainement, des procédures de tri alhabétique ou
numérique de tableau en VBA
Par paresse, j'utilise toujours le tri à bulles :

If NombreEléments >1 Then
Do
Flg = False
For n = 1 to NombreEléments - 1
If Tableau(n) > Tableau(n-1) Then
Tmp = Tableau(n)
Tableau(n) = Tableau(n+1)
Tableau(n+1)=Tmp
Flg = True
End If
Next n
Loop Until Flg = False

End If

C'est, d'après toutes les lectures que j'ai faites, très mauvais...
Auriez-vous une autre façon de procéder avec ces éléments, moins
ringuarde...

3 réponses

Avatar
JLuc
*Bonjour Jean-Luc HOAREAU*,
Je ne vois pas ce que tu trouve de ringuard la dedant 8-o
J'utilise une facon un peu differente mais pour ainsi dire la meme :
If NombreEléments >1 Then
For x = 1 to NombreEléments - 1
For n = x + 1 to NombreEléments
If Tableau(x) > Tableau(n) Then
Tmp = Tableau(n)
Tableau(n) = Tableau(x)
Tableau(x)=Tmp
End If
Next n
Next x
End If

Comme tu travail sur excel, tu peux aussi copier tes donnees sur une
feuille, les triees et les remettres dans ton tableau ;-)
Cette deuxieme solution est peut etre plus rapide si la longueur du dit
tableau est importante et si (en plus) tu vuex trier sur plusieurs
colonnes :')
Bonjour à tous
J'utilise, comme vous certainement, des procédures de tri alhabétique ou
numérique de tableau en VBA
Par paresse, j'utilise toujours le tri à bulles :

If NombreEléments >1 Then
Do
Flg = False
For n = 1 to NombreEléments - 1
If Tableau(n) > Tableau(n-1) Then
Tmp = Tableau(n)
Tableau(n) = Tableau(n+1)
Tableau(n+1)=Tmp
Flg = True
End If
Next n
Loop Until Flg = False

End If

C'est, d'après toutes les lectures que j'ai faites, très mauvais...
Auriez-vous une autre façon de procéder avec ces éléments, moins ringuarde...


--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O

Avatar
Gil HASH
Bonsoir
Désolé pour le temps de réponse à cause d'une panne de mon portable
Ton algorithme semble, en effet, être une amélioration par rapport à celui
du tri à bulles.
Je vais le tester sur mes prochaines réalisations
Merci JLuc
A+

"JLuc" a écrit dans le message de
news:
*Bonjour Jean-Luc HOAREAU*,
Je ne vois pas ce que tu trouve de ringuard la dedant 8-o
J'utilise une facon un peu differente mais pour ainsi dire la meme :
If NombreEléments >1 Then
For x = 1 to NombreEléments - 1
For n = x + 1 to NombreEléments
If Tableau(x) > Tableau(n) Then
Tmp = Tableau(n)
Tableau(n) = Tableau(x)
Tableau(x)=Tmp
End If
Next n
Next x
End If

Comme tu travail sur excel, tu peux aussi copier tes donnees sur une
feuille, les triees et les remettres dans ton tableau ;-)
Cette deuxieme solution est peut etre plus rapide si la longueur du dit
tableau est importante et si (en plus) tu vuex trier sur plusieurs
colonnes :')


Avatar
JB
Bonjour,

Tri quick-sort simple:


Sub essai()
Dim a
n = 10000
ReDim a(1 To n)
For i = 1 To n
a(i) = Int(Rnd(1) * 10000)
Next i
début = Timer
Call tri(a, 1, n)
temps = Timer - début
MsgBox temps
For i = 1 To n: Cells(i, 1) = a(i): Next
End Sub

Sub tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi)
If gauc < d Then Call tri(a, gauc, d)
End Sub

Cordialement JB