Siehe auch: | Sortieren - Quicksort Feld | 

Autor: Peter Haserodt  --- Aus Excel VBA - Gruppe: Häufige Fragen

Sortieren - 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