crilun
Messages postés114Date d'inscriptionlundi 10 mai 2004StatutMembreDernière intervention17 octobre 2006 25 sept. 2006 à 18:49
crilun
à mon avis le plsu rapide est de faire un quicksort puis de parcourir le tableau dans l'ordre, tu peut alors comptabiliser sans pb puisque les memes elements se suivent.
crilun
Messages postés114Date d'inscriptionlundi 10 mai 2004StatutMembreDernière intervention17 octobre 2006 25 sept. 2006 à 21:53
crilun
pour le quickSort il s'agit d'une methode de tri tres rapide en recursif, je vais pas m'etendre dessus c'est expliqué
ici pour ce qui est de ton tableau apparement tu utilises une chaine de caractere (sTableau) et non pas un tableau,
il faut donc que tu la decoupes:
dim sTemp as string()=sTableau.split(",") 'Pour decouper la chaine dans un tableau avec comme caractere separateur ","
tu peut obtenir la longeur de ton tableau grace a sTemp.length
voila tu as tout les elements pour le faire maintenant
crilun
Messages postés114Date d'inscriptionlundi 10 mai 2004StatutMembreDernière intervention17 octobre 2006 26 sept. 2006 à 13:28
crilun
comme promis voici le petit exemple avec tri et parcours du tableau
Private Sub QTri_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim sTableau As String = "100,101,102,100,103,100,104,102,104,103,100,105,106,107,101"
Dim sTemp As String() = sTableau.Split(",")
QuickSort(sTemp, 0, sTemp.Length - 1)
Dim sParcours As String
Dim sPrec As String = ""
Dim sResult As String
Dim iNbr As Integer = 0
For Each sParcours In sTemp 'Parcours et comptage des elements du tableau
If sParcours = sPrec Then
iNbr += 1
Else
If iNbr > 0 Then
sResult += sPrec & "=" & iNbr & vbCrLf
End If
iNbr = 1
End If
sPrec = sParcours
Next
'Ajout du dernier resultat
If iNbr <> 0 Then
sResult += sPrec & "=" & iNbr & vbCrLf
End If
'MsgBox(sResult) 'Affichage du resultat si VB.net
response.write("<script>alert('sResult')</script>") 'Affichage du reseultat si ASP.NET
End Sub
'Tri du tableau
Private Sub QuickSort(ByRef sTab As String(), ByVal iDebut As Integer, ByVal iFin As Integer)
Dim sCellule As String
Dim iPivot As Integer = iDebut
Dim iDroite As Integer = iFin
Dim iGauche As Integer = iDebut
While iGauche <> iDroite 'tant que l'on a pas parcourus tout les elements du debut a la fin
If sTab(iGauche) > sTab(iDroite) Then 'alors on inverse les 2 cellules
sCellule = sTab(iGauche)
sTab(iGauche) = sTab(iDroite)
sTab(iDroite) = sCellule
iPivot = iGauche + iDroite - iPivot
End If
If iPivot = iGauche Then
iDroite -= 1
Else
iGauche += 1
End If
End While
If iDebut < iGauche - 1 Then QuickSort(sTab, iDebut, iGauche - 1) 'appel recursif sur la partie droite
If iFin > iDroite + 1 Then QuickSort(sTab, iDroite + 1, iFin) 'appel récursif sur la partie gauche