Code-Beispiel
Sortieren von Arrays mit BubbleSort
Lizenz: | Erster Autor: | Letzte Bearbeitung: |
k. A. | Sebastian | 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 Sebastian angelegt.
- Die aktuellste Version wurde am 31.08.2010 von ytwinky gespeichert.
|
|