Autor: Peter Haserodt --- Aus Excel VBA - Gruppe:
Häufige FragenSortieren - Quicksort Bereich
Autor: Peter Haserodt - Erstellt: -- - Letzte Revision: --
Quicksort angewendet auf einen Bereich
Quicksort angewendet auf einen einspaltigen Bereich.
Da in das Feld ein einspaltiger Bereich eingelesen wird, muß man beachten, dass dieses Feld 2 Indizes hat.
Man kann dies z.B. gut benutzen, um eine Spalte einzulesen, sortieren und in eine Listbox schreiben.
Dies ist aber ein anderes Thema.
Option Explicit
Public Sub Teste_QuickSort_Bereich()
Dim vX As Variant
vX = Range("B2:B10")
QuickSort_Bereich vX, 1, UBound(vX), False
Range("C2:C10") = vX ' Testausgabe
vX = Range("B2:B10")
QuickSort_Bereich vX, 1, UBound(vX), True
Range("D2:D10") = vX ' Testausgabe
End Sub
Private Sub QuickSort_Bereich(DasFeld, StartUnten, _
EndeOben, Absteigend As Boolean)
'QuickSort_Bereich an Excel 2 dim. Array angepasst-Peter Haserodt
Dim iUnten As Long, iOben, iMitte, y
iUnten = StartUnten
iOben = EndeOben
iMitte = DasFeld((StartUnten + EndeOben) / 2, 1)
While (iUnten <= iOben)
If Not Absteigend Then
While (DasFeld(iUnten, 1) < iMitte And iUnten < EndeOben)
iUnten = iUnten + 1
Wend
While (iMitte < DasFeld(iOben, 1) And iOben > StartUnten)
iOben = iOben - 1
Wend
Else
While (DasFeld(iUnten, 1) > iMitte And iUnten < EndeOben)
iUnten = iUnten + 1
Wend
While (iMitte > DasFeld(iOben, 1) And iOben > StartUnten)
iOben = iOben - 1
Wend
End If
If (iUnten <= iOben) Then
y = DasFeld(iUnten, 1)
DasFeld(iUnten, 1) = DasFeld(iOben, 1)
DasFeld(iOben, 1) = y
iUnten = iUnten + 1
iOben = iOben - 1
End If
Wend
If (StartUnten < iOben) Then Call _
QuickSort_Bereich(DasFeld, StartUnten, iOben, Absteigend)
If (iUnten < EndeOben) Then Call _
QuickSort_Bereich(DasFeld, iUnten, EndeOben, Absteigend)
End Sub
Weitere Artikel der Gruppe: Häufige Fragen Aus Excel VBA
Nach oben