Siehe auch: | Sortieren - Quicksort Bereich | 

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

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