Geschrieben von stefanb am 28.06.2004, 20:39

Hallo Community,

heute will ich auch mal ein kleines Titorial zum besten geben.
Ein Standard Sortieralgorithmus. Der Quicksort in VB!

- Der Quicksort Algorithmus ist einer der bekanntesten Sortieralgorithmen und wurde 1960 von C.A.R. Hoare entwicklet; seitdem wurde er von vielen Forschern untersuch.
Er beeindruckt durch seine Geschwindigkeit, so dass er oft zum Standardrepertoire von C und Pascal Compilern gehört.

- Quick-Sort basiert auf der zerlegung des Arrays in zwei Hälften. Das Array wird in der Mitte gespalten.
Dann prüft man ob sich links von der Mitte nur Elemente befinden die kleiner oder gleich als das Mittelelement sind, und ob sich rechts von der Mitte nur Elemente befinden, die größer oder gleich dem Mittelelement sind.
Findet man ein Element das auf der falschen Seite der Mitte liegt, wird es einfach durch ein Element der anderen Seite ausgetauscht, das dort nicht hingehört

- Wenn sichergestellt ist, das alle Elemente links vom Mittelelement kleiner oder gleich und rechts vom Mittelelement größer oder gleich sind, müssen die linke und die rechte Seiten sortiert werden.
Das "Arbeitspferd" des Quicksort, die Rekursion kann beginnen.

Hier der VB Quellcode:

Sub QuickSort(lngfeld() As Long, lnglinks As Long, lngrechts As Long)

Dim links As Long
Dim rechts As Long
Dim lngmitte As Long
Dim lngTausche As Long

links = lnglinks
rechts = lngrechts
Do
lngmitte = lngfeld((links + rechts) \ 2)
Do While lngfeld(links) < lngmitte
links = links + 1
Loop
Do While lngfeld(rechts) > lngmitte
rechts = rechts - 1
Loop
If links <= rechts Then
lngTausche = lngfeld(links)
lngfeld(links) = lngfeld(rechts)
lngfeld(rechts) = lngTausche
End If

links = links + 1
rechts = rechts - 1
Loop While links <= rechts
If links < lngrechts Then QuickSort lngfeld(), links - 1, lngrechts
If rechts > lnglinks Then QuickSort lngfeld(), lnglinks, rechts + 1

End Sub

Ein kleines Sub-Modul zum Testen des Quicksort:

Sub main()

Const INDEX As Long = 100
Dim Feld(INDEX) As Long
Dim i As Long

Randomize

For i = 0 To INDEX
Feld(i) = Int((100) * Rnd + 1)
Next i

'das unsortierte Feld ausgeben
For i = 0 To INDEX
If i Mod 10 = 0 Then Debug.Print
Debug.Print Feld(i);
Next
Debug.Print vbCrLf

QuickSort Feld(), 0, INDEX
ausgeben Feld(), INDEX

End Sub

Sub ausgeben(lngfeld() As Long, lngGrenze As Long)
'Das Sortierte Feld ausgeben
Dim i As Long
For i = 0 To lngGrenze
If i Mod 10 = 0 Then Debug.Print
Debug.Print lngfeld(i);
Next
Debug.Print vbCrLf
End Sub

Bewertung Anzahl
6
50,0 %
1 Bewertungen
4
50,0 %
1 Bewertungen