Thomas Risi Softwareentwicklung

Sortieralgorithmen

Jeder der sich mit Programmierung befasst, wird früher oder später mit dem Problem konfrontiert, ein Array oder Datensätze zu sortieren. Um diese Aufgabe zu lösen, wurden verschiedene Ansätze entwickelt. Es läßt sich nicht pauschal sagen, daß das eine Verfahren schneller als das Andere ist, und jeder Algorithmus hat seine Daseinsberechtigung. Für große Datenmengen ist QuickSort erste Wahl, während bei kleineren Datenmengen andere Verfahren bessere Ergebnisse liefern. Einen Überblick über das Laufzeitverhalten verschiedener Algorithmen findet sich z.B. in dem Buch C/C++ von Ulrich Kaiser (Galileo Computing).

Nachstehend finden Sie einige Algorithmen zum Einsatz in VB/VBA. Beachten Sie, daß den Funktionen Variant - Arrays übergeben werden. Das bedeutet, daß Sie die Funktionen Ihrem Anwendungsfall anpassen können (z.B. Byte-Arrays, Long-Arrays).


' BubbleSort Sub BubbleSort(ByRef data() As Variant) Dim OG&, i&, h As Variant OG = UBound(data) Do For i = 0 To OG - 1 If data(i) > data(i + 1) Then h = data(i) data(i) = data(i + 1) data(i + 1) = h End If Next i OG = OG - 1 Loop While OG > 1 End Sub
' SelectionSort Sub SelectionSort(ByRef data() As Variant) Dim OG&, i&, j&, k&, h As Variant OG = UBound(data) For i = 0 To OG - 1 h = data(i) k = i For j = i + 1 To OG If data(j) < h Then h = data(j) k = j End If Next j data(k) = data(i) data(i) = h Next i End Sub
' ShellSort Sub ShellSort(ByRef data() As Variant) Dim OG&, i&, j&, k&, h As Variant OG = UBound(data) k = OG \ 2 While k > 0 For i = 0 To OG - k j = i While (j >= 0) And (data(j) > data(j + k)) h = data(j) data(j) = data(j + k) data(j + k) = h If j > k Then j = j - k Else j = 0 End If Wend Next i k = k \ 2 Wend End Sub
' QuickSort Sub QuickSort(data() As Variant, Optional UG, Optional OG) Dim P1&, P2&, T1 As Variant, T2 As Variant UG = IIf(IsMissing(UG), LBound(data), UG) OG = IIf(IsMissing(OG), UBound(data), OG) P1 = UG P2 = OG T1 = data((P1 + P2) / 2) Do Do While (data(P1) < T1) P1 = P1 + 1 Loop Do While (data(P2) > T1) P2 = P2 - 1 Loop If P1 <= P2 Then T2 = data(P1) data(P1) = data(P2) data(P2) = T2 P1 = P1 + 1 P2 = P2 - 1 End If Loop Until (P1 > P2) If UG < P2 Then QuickSort data, UG, P2 If P1 < OG Then QuickSort data, P1, OG End Sub

Bewerten Sie bitte dieses Programm.
1 2 3 4 5
Weniger nützlich Sehr nützlich
Bitte teilen Sie uns mit, warum Sie das Programm so bewertet haben. (optional)