Code-Beispiel
UDT - Array sortieren
Lizenz: | Erster Autor: | Letzte Bearbeitung: |
k. A. | Volta | 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 | |||||||
---|---|---|---|---|---|---|---|
|