Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Code-Beispiel

Code-Beispiele » Suchen und Sortieren

Sortieren von Arrays mit BubbleSort

Lizenz:Erster Autor:Letzte Bearbeitung:
k. A.AdministratorSebastian 31.08.2010

Der BubbleSort-Algorithmus ist zwar ein relativ langsam arbeitender Sortieralgorithmus, ist jedoch einfach zu verstehen und zu programmieren. Für kleine Sortieraktionen wie z.B. für eine Highscore-Liste in einem selbstgeschriebenen Spiel ist er zudem völlig ausreichend. Bei größeren Datenmengen sollte auf einen effizienteren Algorithmus wie QuickSort zurückgegriffen werden.

'Bubble-Sort Beispiel für FreeBasic
'getestet mit FB 0.18 CVS (18.05.07)
'Der Code darf frei verwendet werden.
'Für eventuelle Schäden wird nicht gehaftet.
'AnzeigeCheck:|Il1 sind Alt-0124, Großes i, kleines L, Eins „ä”öüáߎę֚Üñ±¸©ø°
'Option Explicit 'war unter fb016b eine sinnvolle Sache, ist ab 0.17 Standard
'Per #define legen wir erstmal einen neuen Datentyp fest
'(Vorteil: Muß der Datentyp irgendwann mal geändert werden, einfach nur diese Zeile ändern..)
#define Real Single
' ^ Ein kleiner Kunstgriff: Festlegung einer anderen Bezeichnung für den Datentyp Single
Const MaxMat=7 'diese Konstante gilt für das ganze Programm
Dim Feld(MaxMat) As Real 'Das Array Feld nimmt die Matrix auf
Dim i As Integer 'Eine Integer-Variable zur Schleifensteuerung

Sub BubbleSort(Tipp() As Real, byVal how As String=">") 'Sortiert kleinere Datenmengen zuverlässig in beiden Richtungen
  Dim As Integer i, j, l=LBound(Tipp), u=UBound(Tipp)
  For i=l To u
    For j=l To u 'vom Anfang der Schleife bis zu ihrem Ende, hier gibt's noch Optimiermöglichkeiten :D
      If IIF(how=">", Tipp(i)<Tipp(j), Tipp(i)>Tipp(j)) Then Swap Tipp(i), Tipp(j) 'je nach gewählter Richtung werden die Elemente getauscht
    Next
  Next
End Sub

Sub MatOut(Msg As String="", Tipp() As Real) 'Gibt die Matrix aus
  Dim i As Integer 'Schleifenzähler
  If Msg<>"" Then Print Msg 'Meldung vorhanden? Ja, dann ausgeben..
  For i=LBound(Tipp) To UBound(Tipp)
    Print Tipp(i)
  Next
End Sub

Randomize Timer 'den Zufallszahlengenerator mit einem zeitabhängigen Wert initialisieren

For i=LBound(Feld) To UBound(Feld)
  Feld(i)=Rnd 'eine Zufallszahl erzeugen, in diesem Beispiel ist der Wert ja egal
Next

BubbleSort(Feld()) 'und sortieren, aufwärts ist default, braucht also nicht angegeben zu werden
MatOut("Aufw„rts", Feld()) 'sortierte Matrix ausgeben..

BubbleSort(Feld(), "<") 'und sortieren, diesmal aber abwärts
MatOut("Abw„rts", Feld()) 'sortierte Matrix ausgeben..
Sleep 'Programmende, auf Tastendruck warten, funktioniert aber nur im Konsolenmodus
End 'eigentlich nicht erforderlich, aber guter Stil :D

Zusätzliche Informationen und Funktionen
  • Das Code-Beispiel wurde am 09.06.2007 von AdministratorSebastian angelegt.
  • Die aktuellste Version wurde am 31.08.2010 von Redakteurytwinky gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen