Autor: Peter Haserodt --- Aus Excel VBA - Gruppe:
Häufige FragenSortieren - Quicksort Feld
Autor: Peter Haserodt - Erstellt: -- - Letzte Revision: --
Quicksort ist ein bekannter Algorithmus zum schnellen Sortieren.
Im Gegensatz zum Beispiel zu Bubblesort, welcher erheblich langsamer ist.
Das interessante ist die Technik, mit der er funktioniert. Wer sich dafür interessiert, sollte sich den Code des Sortierens genauer anschauen.
Es hilf sehr oft, Bereich immer wieder zu halbieren, um im kleineren Bereich zu vergleichen (gerade bei Umgang mit Texten).
Hier im Beispiel wird ein Feld sortiert. Die Testausgabe erfolgt im Tabellenblatt.
Option Explicit
Public Sub Teste_QuickSort_Feld()
Dim vX As Variant
vX = Array("B", "Z", "A", "R")
QuickSort_Feld vX, 0, UBound(vX), False
Range("b2:e2") = vX ' Testausgabe
vX = Array("B", "Z", "A", "R")
QuickSort_Feld vX, 0, UBound(vX), True
Range("b3:e3") = vX ' Testausgabe
End Sub
Private Sub QuickSort_Feld(DasFeld, StartUnten, EndeOben, _
Absteigend As Boolean)
'QuickSort Standard
Dim iUnten As Long, iOben, iMitte, y
iUnten = StartUnten
iOben = EndeOben
iMitte = DasFeld((StartUnten + EndeOben) / 2)
While (iUnten <= iOben)
If Not Absteigend Then
While (DasFeld(iUnten) < iMitte And iUnten < EndeOben)
iUnten = iUnten + 1
Wend
While (iMitte < DasFeld(iOben) And iOben > StartUnten)
iOben = iOben - 1
Wend
Else
While (DasFeld(iUnten) > iMitte And iUnten < EndeOben)
iUnten = iUnten + 1
Wend
While (iMitte > DasFeld(iOben) And iOben > StartUnten)
iOben = iOben - 1
Wend
End If
If (iUnten <= iOben) Then
y = DasFeld(iUnten)
DasFeld(iUnten) = DasFeld(iOben)
DasFeld(iOben) = y
iUnten = iUnten + 1
iOben = iOben - 1
End If
Wend
If (StartUnten < iOben) Then Call _
QuickSort_Feld(DasFeld, StartUnten, iOben, Absteigend)
If (iUnten < EndeOben) Then Call _
QuickSort_Feld(DasFeld, iUnten, EndeOben, Absteigend)
End Sub
Weitere Artikel der Gruppe: Häufige Fragen Aus Excel VBA
Nach oben