Hallo!
Für ein String-Array in VB.Net schnell umgebaut:
' vSort: 2-dimensionales Array
' index: Spalte, nach der sortiert werden soll (1, 2, 3, ...)
Public Shared Sub QuickSortMultiDim(ByVal vSort(,) As String, _
Optional ByVal index As Integer = 1,
Optional ByVal lngStart As Integer = -1, _
Optional ByVal lngEnd As Integer = -1)
' Wird die Bereichsgrenze nicht angegeben,
' so wird das gesamte Array sortiert
If lngStart < 0 Then lngStart = 0
If lngEnd < 0 Then lngEnd = UBound(vSort, 1)
Dim i, j, u As Integer
Dim x, h As String
Dim lb_dim, ub_dim As Integer
' Anzahl Elemente pro Datenzeile
lb_dim = LBound(vSort, 2) : ub_dim = UBound(vSort, 2)
i = lngStart : j = lngEnd
x = vSort((lngStart + lngEnd) \ 2, index - 1)
' Array aufteilen
Do
While (vSort(i, index - 1) < x) : i = i + 1 : End While
While (vSort(j, index - 1) > x) : j = j - 1 : End While
If (i <= j) Then
' Wertepaare miteinander tauschen
For u = lb_dim To ub_dim
h = vSort(i, u)
vSort(i, u) = vSort(j, u)
vSort(j, u) = h
Next u
i = i + 1 : j = j - 1
End If
Loop Until (i > j)
' Rekursion (Funktion ruft sich selbst auf)
If (lngStart < j) Then QuickSortMultiDim(vSort, index, lngStart, j)
If (i < lngEnd) Then QuickSortMultiDim(vSort, index, i, lngEnd)
End Sub
Public Shared Sub Test()
Dim Mydata(9, 4) As String
AddToArray(Mydata, 0, 1, "Otter Dieter", 35, CDate("05.05.1973"), 981)
AddToArray(Mydata, 1, 2, "Meier Julia", 33, CDate("12.08.1974"), 851)
AddToArray(Mydata, 2, 3, "Müller Hugo", 49, CDate("01.12.1958"), 612)
AddToArray(Mydata, 3, 4, "Schmitt Hans", 26, CDate("19.02.1981"), 971)
AddToArray(Mydata, 4, 5, "Müller Anton", 71, CDate("13.10.1968"), 421)
AddToArray(Mydata, 5, 6, "Maier H.", 17, CDate("16.04.1986"), 468)
AddToArray(Mydata, 6, 7, "roSoft", 48, CDate("27.12.1952"), 419)
AddToArray(Mydata, 7, 8, "Mustermann Max", 74, CDate("02.06.1971"), 149)
AddToArray(Mydata, 8, 9, "Schmidt G.", 62, CDate("17.02.1952"), 148)
AddToArray(Mydata, 9, 10, "A. Herbert", 27, CDate("26.11.1963"), 174)
' Array nach 4. Spalte sortieren
QuickSortMultiDim(Mydata, 2)
End Sub
' Hilfsfunktion: 2-dimensionales Array schneller füllen
Private Shared Sub AddToArray(ByRef arDaten(,) As String, ByVal index As _
Integer, _
ByVal ParamArray values() As Object)
Dim i As Integer
For i = 0 To UBound(values)
arDaten(index, i) = CStr(values(i))
Next i
End Sub
Beitrag wurde zuletzt am 11.01.11 um 11:00:20 editiert. |