Fonction Servant a classer les Elements d'un Dataset a la maniere QuickSort
à partir d'un numero de colonne passé en parametre,
et pour une colonne contenant des entiers
Source / Exemple :
'Function Quicksort de Tri Rapide a partir de Champ d'entiers
Public Function intQsort(ByVal g As Integer, ByVal d As Integer, ByRef DT As DataTable, ByVal int_Champ As Integer) As Boolean
Dim int_Deb, int_Fin As Integer 'Bornes du Tableau
Dim i, m As Integer
'Champs Temporaires du dataset
Dim int_IdTemp, int_IdBaseTemp, int_IdTypeTemp As Integer
Dim Str_NomTemp As String
m = g
'On Considere le Point g element gauche du tableau comme Pivot rem: il pourrait etre plsu optimisé de le prendre aleatoirement
'm : curseur suivant l'empilement des elements deplacés
If g < d Then 'Condition d'arret du QuickSort
'on place a droite tout les elements inferieur au pivot et a gauche tout ce superieur au pivot
For i = g + 1 To d
If CInt(DT.Rows.Item(i).Item(int_Champ)) < CInt(DT.Rows.Item(g).Item(int_Champ)) Then 'alors Inferieur au pivot
'Placement à Gauche
m += 1
int_IdTemp = DT.Rows.Item(m).Item("ID")
int_IdBaseTemp = DT.Rows.Item(m).Item("Base")
int_IdTypeTemp = DT.Rows.Item(m).Item("Type")
Str_NomTemp = DT.Rows.Item(m).Item("Nom")
DT.Rows.Item(m).Item("ID") = DT.Rows.Item(i).Item("ID")
DT.Rows.Item(m).Item("Base") = DT.Rows.Item(i).Item("Base")
DT.Rows.Item(m).Item("Type") = DT.Rows.Item(i).Item("Type")
DT.Rows.Item(m).Item("Nom") = DT.Rows.Item(i).Item("Nom")
DT.Rows.Item(i).Item("ID") = int_IdTemp
DT.Rows.Item(i).Item("Base") = int_IdBaseTemp
DT.Rows.Item(i).Item("Type") = int_IdTypeTemp
DT.Rows.Item(i).Item("Nom") = Str_NomTemp
End If
Next
'on place le pivot a la fin des elements modifiés puisque celui ci est plus grand que les elements deplacés
int_IdTemp = DT.Rows.Item(m).Item("ID")
int_IdBaseTemp = DT.Rows.Item(m).Item("Base")
int_IdTypeTemp = DT.Rows.Item(m).Item("Type")
Str_NomTemp = DT.Rows.Item(m).Item("Nom")
DT.Rows.Item(m).Item("ID") = DT.Rows.Item(g).Item("ID")
DT.Rows.Item(m).Item("Base") = DT.Rows.Item(g).Item("Base")
DT.Rows.Item(m).Item("Type") = DT.Rows.Item(g).Item("Type")
DT.Rows.Item(m).Item("Nom") = DT.Rows.Item(g).Item("Nom")
DT.Rows.Item(g).Item("ID") = int_IdTemp
DT.Rows.Item(g).Item("Base") = int_IdBaseTemp
DT.Rows.Item(g).Item("Type") = int_IdTypeTemp
DT.Rows.Item(g).Item("Nom") = Str_NomTemp
'le pivot est a la bonne place, on repete l'operation pour les elements de gauche et ceux de droite par rapport au curseur m
'quick sort a Gauche
If intQsort(g, m - 1, DT, int_Champ) = False Then
intQsort = False
Exit Function
End If
'quickSort a Droite
If intQsort(m + 1, d, DT, int_Champ) = False Then
intQsort = False
Exit Function
End If
End If
intQsort = True
End Function
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.