Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

BubbleSort für String Arrays

Forumthread: BubbleSort für String Arrays

BubbleSort für String Arrays
20.06.2006 09:15:06
Thorsten
Hi,
ich hab mir mal ein BubbleSort geschrieben, nur mein Problem ist das der Code nur innerhalb dieses Subs Sortiert, das übergebene Array scheint er nicht anzurühren. Aber genau das will ich, ich versteh einfach nicht wo das Problem liegt.
Public &ltpre&gt
Sub BubbleSort(a As Variant)
Dim i As Long, n As Long, Temp As Variant
n = UBound(a) 'Feldgröße bestimmen
Do
'In diesem Durchgang wurden noch keine Veränderungen vorgenommen
Sortiert = True
'Gehe alle Feldelemente durch außer dem letzten
For i = 0 To n - 1
If TypeName(a(i)) = "String" And TypeName(a(i + 1)) = "String" Then
'Vergleiche das aktuelle Feldelement mit dem nächsten
If Left(a(i), 1) &lt Left(a(i + 1), 1) Then
'Ist dieses größer, vertausche die beiden Werte
Temp = a(i)
a(i) = a(i + 1)
a(i + 1) = Temp
'Es wurden Veränderungen vorgenommen
Sortiert = False
Exit For
End If
If Left(a(i), 1) = Left(a(i + 1), 1) Then
If Left(a(i), 2) &lt Left(a(i + 1), 2) Then
'Ist dieses größer, vertausche die beiden Werte
Temp = a(i)
a(i) = a(i + 1)
a(i + 1) = Temp
'Es wurden Veränderungen vorgenommen
Sortiert = False
Exit For
End If
End If
Else
'Vergleiche das aktuelle Feldelement mit dem nächsten
If a(i) &lt a(i + 1) Then
'Ist dieses größer, vertausche die beiden Werte
Temp = a(i)
a(i) = a(i + 1)
a(i + 1) = Temp
'Es wurden Veränderungen vorgenommen
Sortiert = False
End If
End If
Next i
'Wiederhole den Vorgang, bis bei einem Durchgang keine Veränderungen vorgenommen werden mussten
Loop Until Sortiert
End Sub&lt/pre&gt
Gruß Thorsten
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: BubbleSort für String Arrays
20.06.2006 15:21:00
Thorsten
Komischerweise hat sich das ganze nun aufgelöst. Ich hab es mal wieder in der einfachen Variante Probiert und es ging...
hier der BubbleSort der doch schon alles Sortiert

Function BubbleSort(a As Variant)
Dim i As Long, n As Long, Temp As Variant
n = UBound(a)
Do
Sortiert = True
For i = 0 To n - 1
If a(i) > a(i + 1) Then
Temp = a(i)
a(i) = a(i + 1)
a(i + 1) = Temp
Sortiert = False
End If
Next i
Loop Until Sortiert
End Function

Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

BubbleSort für String Arrays in Excel VBA


Schritt-für-Schritt-Anleitung

Um einen BubbleSort für String Arrays in Excel VBA zu erstellen, folge diesen Schritten:

  1. Öffne den VBA-Editor in Excel, indem du ALT + F11 drückst.

  2. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject (DeinArbeitsblattName)" > Einfügen > Modul.

  3. Gib den folgenden Code ein:

    Sub BubbleSort(a As Variant)
       Dim i As Long, n As Long, Temp As Variant
       n = UBound(a) 'Feldgröße bestimmen
       Do
           Sortiert = True
           For i = 0 To n - 1
               If a(i) > a(i + 1) Then
                   Temp = a(i)
                   a(i) = a(i + 1)
                   a(i + 1) = Temp
                   Sortiert = False
               End If
           Next i
       Loop Until Sortiert
    End Sub
  4. Rufe die Subroutine auf, um ein Array zu sortieren, indem du ein Array übergibst.


Häufige Fehler und Lösungen

  • Problem: Der Code sortiert das Array nicht.

    • Lösung: Stelle sicher, dass das übergebene Array in der richtigen Form vorliegt. Es muss ein Variant-Array sein.
  • Problem: Typenkonflikte bei Strings.

    • Lösung: Überprüfe die Datentypen der Elemente im Array. Verwende TypeName(a(i)), um sicherzustellen, dass es sich um Strings handelt.

Alternative Methoden

Wenn der BubbleSort nicht deinen Anforderungen entspricht, kannst du folgende alternative Methoden ausprobieren:

  • QuickSort: Schneller und effizienter für große Datenmengen.
  • Excel-Funktionen: Nutze die Sortieren-Funktion in Excel, um Daten ohne VBA zu sortieren.

Beide Methoden können je nach Anwendungsfall einfacher oder effektiver sein.


Praktische Beispiele

Hier ist ein praktisches Beispiel, um den BubbleSort zu verwenden:

Sub TestBubbleSort()
    Dim myArray As Variant
    myArray = Array("Banane", "Apfel", "Kirsche", "Dattel")

    Call BubbleSort(myArray)

    Dim i As Long
    For i = LBound(myArray) To UBound(myArray)
        Debug.Print myArray(i)
    Next i
End Sub

Führe TestBubbleSort aus, um das Array zu sortieren und die Ergebnisse im Direktfenster anzuzeigen.


Tipps für Profis

  • Optimiere den Code: Reduziere die Anzahl der Vergleiche, indem du die Durchläufe bei bereits sortierten Daten minimierst.
  • Verwende Application.Transpose: Um ein 2D-Array in ein 1D-Array zu konvertieren, bevor du es sortierst.
  • Fehlerbehandlung: Implementiere Fehlerbehandlung, um unerwartete Eingaben abzufangen.

FAQ: Häufige Fragen

1. Wie kann ich den BubbleSort für numerische Arrays anpassen?
Du kannst die Vergleichsoperatoren im Code anpassen, um numerische Vergleiche zu ermöglichen. Stelle sicher, dass das Array numerische Werte enthält.

2. Funktioniert dieser Code in Excel 365?
Ja, dieser BubbleSort-Code ist in Excel 365 und anderen Versionen von Excel VBA lauffähig.

3. Was mache ich, wenn mein Array leer ist?
Überprüfe die Größe des Arrays mit If UBound(a) < 0 Then und gib eine entsprechende Fehlermeldung aus.

4. Kann ich den BubbleSort auch für andere Datentypen verwenden?
Ja, du kannst den Code anpassen, um andere Datentypen zu sortieren, aber achte darauf, die Vergleichslogik entsprechend zu ändern.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige