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 Function BubbleSort(vArray As Variant, _
  Optional Ascending As Boolean = True)
'
' Ascending = True: aufsteigend sortieren
'
  If Not IsArray(vArray) Then Exit Function
  Dim Mark As Long, I As Long, EndIdx As Long, StartIdx As Long
  Dim Temp As Variant
 
  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 I
    EndIdx = Mark
  Loop
End Function

Aufruf

Ein kleines Testbeispiel:

Public Sub BubbleTest()
Dim A(10) As Double, 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.