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...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
*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...
*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
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 :')
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" <ns.jeanluc.laurent@free.fr.ns> a écrit dans le message de
news:mn.51b87d641596b565.40692@free.fr.ns...
*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 :')
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 :')
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
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
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