- '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
'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