VBA Tipp: Bubblesort

Aus DBWiki
Wechseln zu: Navigation, Suche

Aufgabenstellung

Ich möchte ein Array sortieren.

Lösung

Einer der einfachsten - wenn auch nicht einer der effizientesten - Sortieralgorithmen ist der Bubblesort-Algorithmus:

Public Sub BubbleSort(vArray As Variant, _
                      Optional ByVal Ascending As Boolean = True)
 
   'Ascending = True: aufsteigend sortieren
 
   Dim Mark     As Long
   Dim i        As Long
   Dim EndIdx   As Long
   Dim StartIdx As Long
   Dim Temp     As Variant
 
   If Not IsArray(vArray) Then Exit Sub
 
   EndIdx = UBound(vArray)
   StartIdx = LBound(vArray)
   Do While EndIdx > StartIdx
      Mark = StartIdx
      For i = StartIdx To EndIdx - 1
         If vArray(i) > vArray(i + 1) Eqv Ascending Then
            Temp = vArray(i)
            vArray(i) = vArray(i + 1)
            vArray(i + 1) = Temp
            Mark = i
         End If
      Next
      EndIdx = Mark
   Loop
End Sub

Aufruf

Ein kleines Testbeispiel:

Public Sub BubbleTest()
   Dim a(10) As Double
   Dim i As Long
 
   Randomize
   For i = LBound(a) To UBound(a): a(i) = Fix(Rnd() * 100): Next
   For i = LBound(a) To UBound(a): Debug.Print i, a(i): Next
   BubbleSort a, True
   For i = LBound(a) To UBound(a): Debug.Print i, a(i): Next
   BubbleSort a, False
   For i = LBound(a) To UBound(a): Debug.Print i, a(i): Next
End Sub

Weblinks

Zu Sortieralgorithmen siehe z.B.