Petit bout de code sans aucune prétention, pour que le site possède des algorithmes types, au milieu des exemples. Ce petit bout de code pourra servir si vous cherchez un moyen rapide et efficace pour trier un tableau de valeur. Si vous utilisez un autre langage que le VB, l'algorithme est utilisable dans BEAUCOUP de language.
Plus communément appellé le tri a bulle.....
Petit problème connu : C'est vous qui me l'apprendrai =)
Source / Exemple :
Dim i, j, tmp, tmpMin, tmpMax, tableau(10)
Dim invert as Boolean
'Considérons que le tableau est plein de valeurs aléatoires....
tmpMin = 1
tmpMax = 0
invert = True
While invert = True
For i=0 to 10
If tableau(i)>tableau(i+1)
tmpMax = tableau(i)
tableau(i) = tableau(i+1)
invert = True
Else
invert = False
End If
If tableau(i)<tableau(i+1)
tmpMin = tableau(i+1)
tableau(i+1) = tableau(i)
invert = True
Else
invert = False
End If
Next
Wend
Conclusion :
IMPORTANT : Je connais bien cette alogorithme. Le seul problème, c'est que je l'ai tapée directement ici, sans la tester. Ce n'est pas pour autant qu'elle est fausse, je suis quasi-sur qu'elle fonctionne. Si quelqu'un la teste, merci de me dire si cela fonctionne bien, et si il y a un moyen pour l'optimiser.
A bientot Ben.
5 mai 2011 à 15:33
Si J'ai bien compris ta volonte de Benbax, tu voulais presenter a la fois la possibilite de tri croissant, et celle pour un tri decroissant ?
J'ai ecrit le code en consequence, inspire du tiens.
Il suffit de uncomment le tri decroissant, et comment le tri croissant pour inverser l'ordre :-)
Sub tri()
Dim i As Byte
Dim j As Byte
Dim tmp As Byte
Dim tmpMin As Byte
Dim tmpMax As Byte
Dim tableau(10) As Byte
Dim invert As Boolean
' ***** POUR L'EXEMPLE **************************************
'Considérons que le tableau est plein de valeurs aléatoires....
tableau(1) = 5
tableau(2) = 3
tableau(3) = 46
tableau(4) = 7
tableau(5) = 2
' **************************************************************
Do
invert = False
For i = 1 To 4
' ******** Ordre CROISSANT ***********
If tableau(i) > tableau(i + 1) Then
tmpMax = tableau(i)
tableau(i) = tableau(i + 1)
tableau(i + 1) = tmpMax
invert = True
End If
' *************************************
'' ******** Ordre DECROISSANT *********
'
' If tableau(i) < tableau(i + 1) Then
'
' tmpMin = tableau(i + 1)
' tableau(i + 1) = tableau(i)
' tableau(i) = tmpMin
' invert = True
'
' End If
'
'' *************************************
Next i
Loop While invert
'***** POUR L'EXEMPLE *********
For i = 1 To 5
Debug.Print tableau(i)
Next i
'*******************************
End Sub
24 févr. 2004 à 23:11
Désolé, pour les eventuels problèmes posé...
Je n'ai pas le temps de modifer, alors remerciement a psycho =)
9 janv. 2004 à 15:18
tmpmax=tableau(i)
tableau(i)=tableau(i+1)
mais tu ne fais pas tableau(i+1)=tmpmax
donc, le tri n est pas fais, tu affectes juste le maximum a tous les éléments du tableau
dis moi si je me trompe.
allez @+
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.