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

UDT - Array sortieren

Lizenz:Erster Autor:Letzte Bearbeitung:
k. A.RedakteurVolta 17.04.2013

Auch UDTs lassen sich sortieren, zumindest ein Element sollte dabei numerisch sein und als Sortierindex brauchbar.
Ein Highscore besteht ja meist aus Name und Punktestand ist also ein ideales Beispiel für ein UDT welches sortiert werden soll.

Type SortType
  p As Integer 'Punkte
  n As String  'Name
End Type

Dim sortarray(6) As SortType
sortarray(0).p=2621 : sortarray(0).n="ytwinky"
sortarray(1).p=1646 : sortarray(1).n="Eternal_pain"
sortarray(2).p=5611 : sortarray(2).n="Sebastian"
sortarray(3).p=1746 : sortarray(3).n="Volta"
sortarray(4).p=9309 : sortarray(4).n="Jojo"
sortarray(5).p=2211 : sortarray(5).n="dreael"
sortarray(6).p=3391 : sortarray(6).n="nemored"

Declare Sub QSort(Feld() As SortType, ByVal l As Integer, ByVal r As Integer, ByVal Downwards As Integer=0)
Declare Sub BubbleSort (Item() As SortType, Count As Integer)

For i As Integer = 0 To 6
  Print sortarray(i).n,sortarray(i).p
Next
Print
QSort (sortarray(),0,6,1)
'BubbleSort (sortarray(),6)

For i As Integer = 0 To 6
  Print sortarray(i).n,sortarray(i).p
Next
Sleep

Sub QSort(Feld() As SortType, ByVal l As Integer, ByVal r As Integer, ByVal Downwards As Integer=0)
  Dim As Integer i=l, j=r 'Variablen für die Schleifensteuerung festlegen
  Dim As Integer x=Feld((l+r)\2).p 'Referenz-Element ermitteln, das 'Mittelste' im Feld
  Do
    While IIf(Downwards, Feld(i).p>x, Feld(i).p<x) 'Ein passendes Vergleichselement finden
      i+=1 'Zähler erhöhen
    Wend
    While IIf(Downwards, x>Feld(j).p, x<Feld(j).p) 'Noch ein passendes Element finden
      j-=1
    Wend
    If i<=j Then 'ggfs.
      Swap Feld(i), Feld(j) '..tauschen
      i+=1 'Zähler erhöhen..
      j-=1 '..diesen erniedrigen..
    End If
  Loop Until i>j
  If l<j Then QSort(Feld(), l, j, Downwards) 'ggfs mit den neuen Grenzen sortieren
  If i<r Then QSort(Feld(), i, r, Downwards) 'anderenfalls mit den neuen Grenzen sortieren
End Sub

Sub BubbleSort (Item() As SortType, Count As Integer)
  Dim As Integer i, j, swaps
  For i = 1 To Count
    swaps = 0
    For j = 0 To Count - i
      If Item(j).p < Item(j+1).p Then
        Swap Item(j), Item(j+1)
        swaps +=1
      EndIf
    Next
    If swaps = 0 Then Exit For
  Next
End Sub


Zusätzliche Informationen und Funktionen
  • Das Code-Beispiel wurde am 17.04.2013 von RedakteurVolta angelegt.
  • Die aktuellste Version wurde am 17.04.2013 von RedakteurVolta gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen