ich habe eine Quicksortroutine, die 2-dimensionale Arrays nach dem angegebenen Sortierschlüssel sortiert.
Wie kann ich die Routine erweitern, um 2 oder 3 Sortierschlüssel zu ermöglichen ?
Danke Stefan.
Public
Sub Quicksort(vntFeld As Variant, _
ByVal lngOrder As Long, _
Optional ByVal lngUGrenze As Long = -1, _
Optional ByVal lngOGrenze As Long = -1)
' geändert Stefan Krähe / 06.09.2005
' Sortiert ein 2D-Array
' 1. Dimension enthält die Felder und 2. Dimension die Datensätze
' Sortiert innerhalb der 2. Dimension
Dim lngUIndex As Long
Dim lngOIndex As Long
Dim lngHelpIndex As Long
Dim vntElement As Variant
Dim strSort As String
Dim varBuffer As Variant
'Initialisierung
If lngUGrenze = -1 Then lngUGrenze = LBound(vntFeld, 2)
If lngOGrenze = -1 Then lngOGrenze = UBound(vntFeld, 2)
lngUIndex = lngUGrenze
lngOIndex = lngOGrenze
'Vergleichselemente lesen
vntElement = vntFeld(lngOrder, (lngUIndex + lngOIndex) / 2)
Do
Do While vntFeld(lngOrder, lngUIndex) < vntElement
lngUIndex = lngUIndex + 1
Loop
Do While vntFeld(lngOrder, lngOIndex) > vntElement
lngOIndex = lngOIndex - 1
Loop
If lngUIndex <= lngOIndex Then
'Elemente tauschen
For lngHelpIndex = LBound(vntFeld, 1) To UBound(vntFeld, 1)
varBuffer = vntFeld(lngHelpIndex, lngUIndex)
vntFeld(lngHelpIndex, lngUIndex) = vntFeld(lngHelpIndex, lngOIndex)
vntFeld(lngHelpIndex, lngOIndex) = varBuffer
Next lngHelpIndex
lngUIndex = lngUIndex + 1
lngOIndex = lngOIndex - 1
End If
Loop Until (lngUIndex > lngOIndex)
'Iterativ durchlaufen
If lngUGrenze < lngOIndex Then Call Quicksort(vntFeld, lngOrder, lngUGrenze, lngOIndex)
If lngUIndex < lngOGrenze Then Call Quicksort(vntFeld, lngOrder, lngUIndex, lngOGrenze)
End Sub