Hi,
ich habe verschiedenes alphabetisch zu sortieren. Meist Textlisten / Arrays.
Nun hab ich mal irgendwo gesehen, dass ein Sortieralgorithmus nicht generell für alles geeignet ist.
Es gibt afaik einen Algorithmus, der nur für kleine Listen gut geeignet ist, da aber dann sehr schnell, dann gibt es wieder einen Algorithmus der nur für große Listen taugt.
Ich habe hier beides vorliegen: große und kleine Listen.
Ich habe hier nur den Shell - Sort:
Public Function ArrayShellSort (vSource As Variant) As Variant
On Error Goto ErrorHandler
Dim vSortArray As Variant
Dim bDone As Integer
Dim lngPointer As Long
Dim lngLoop1 As Long
Dim lngLoop2 As Long
Dim vTemp As Variant
If Not Isarray(vSource) Or Isempty (vSource) Then
ArrayShellSort = vSource
Exit Function
End If
vSortArray = vSource
lngPointer = Ubound (vSortArray)
'Algorithm by Donald Lewis Shell resp. Marlene Metzner
While lngPointer > 0
lngPointer = lngPointer \ 2
Do
bDone = True
For lngLoop2 = 0 To Ubound (vSortArray) - lngPointer
lngLoop1 = lngLoop2 + lngPointer
If vSortArray (lngLoop2) > vSortArray (lngLoop1) Then
vTemp = vSortArray (lngLoop1)
vSortArray (lngLoop1) = vSortArray (lngLoop2)
vSortArray (lngLoop2) = vTemp
bDone = False
End If
Next
Loop Until bDone
Wend
'Return the result
ArrayShellSort = vSortArray
ExitScript:
Exit Function
ErrorHandler:
Call ErrorMsg("ArrayShellSort")
Resume ExitScript
End Function
Was empfehlt Ihr für
a) kleine Listen
b) große Listen
?