 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Gloka
Anmeldungsdatum: 16.04.2013 Beiträge: 5
|
Verfasst am: 16.04.2013, 10:08 Titel: Zeidimensionales array sortieren? |
|
|
Hallo miteinander ich bin ein Freebasic und allgemeiner Programmiere Anfänger.
Ich habe da eine Frage bei der Ihr mir vielleicht helfen könntet.
Ist es möglich ein zweidimensionales array zu ordnen? Das array sieht in etwa so aus:
Hund 2
Blume 1
Haus 3
Auto 5
Zug 4
Ich möchte das jetzt der Grösse nach ordnen, aber so dass zu der Blume immer die 1 gehört und zum Hund die 2. Es sollte dann am Schluss so aussehen:
Blume 1
Hund 2
Haus 3
Zug 4
Auto 5
Bubblesort ist mir bekannt aber ich kenne das nur für ein eindimensionales array, kann man das erweitern? |
|
Nach oben |
|
 |
Affemitwaffel
Anmeldungsdatum: 02.06.2011 Beiträge: 39
|
Verfasst am: 16.04.2013, 12:41 Titel: |
|
|
Hi,
wäre es nicht eventuell einfacher, wenn du einfach einen UDT machst und dann nur eine 1-Dimensionale Array erstellst?
Es sieht in dem Beispiel aber so aus, als ob der Gegenstand (oder was auch immer^^) schon direkt neben der Zahl steht und damit sollte es beim sortieren genauso funktionieren wie bei einer 1-Dimensionalen Array |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 16.04.2013, 14:30 Titel: |
|
|
Ein zweidimensionales Array würde sich hier meines Erachtens sowieso nicht anbieten; wenn dann zwei eindimensionale Arrays:
begriff(1) = "Hund" : wert(1) = 2
begriff(2) = "Blume" : wert(2) = 1
usw.
Dann könntest du naxh wert() sortieren und begriff() in gleicher Weise mitsortieren. Noch etwas einfacher geht es aber, wie Affemitwaffel schon erwähnt hat, mit UDTs. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 16.04.2013, 15:44 Titel: |
|
|
Hi,
wenn es ein UDT sein soll
Code: | ' nach ytwinkys:
'http://www.freebasic-portal.de/code-beispiele/suchen-und-sortieren/qsort-shellsort-54.html
'aber auf das UDT angepasstes Qsort
Type SortType
i As Integer
s As String
End Type
Dim sortarray(4) As SortType
sortarray(0).i=2 : sortarray(0).s="Hund"
sortarray(1).i=1 : sortarray(1).s="Blume"
sortarray(2).i=3 : sortarray(2).s="Haus"
sortarray(3).i=5 : sortarray(3).s="Auto"
sortarray(4).i=4 : sortarray(4).s="Zug"
Declare Sub QSort(Feld() As SortType, ByVal l As Integer, ByVal r As Integer, ByVal Downwards As Integer=0)
For i As Integer = 0 To 4
Print sortarray(i).s;" ";sortarray(i).i
Next
Print
QSort (sortarray(),0,4,0)
For i As Integer = 0 To 4
Print sortarray(i).s;" ";sortarray(i).i
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).i 'Referenz-Element ermitteln, das 'Mittelste' im Feld
Do
While IIf(Downwards, Feld(i).i>x, Feld(i).i<x) 'Ein passendes Vergleichselement finden
i+=1 'Zähler erhöhen
Wend
While IIf(Downwards, x>Feld(j).i, x<Feld(j).i) '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 |
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
Gloka
Anmeldungsdatum: 16.04.2013 Beiträge: 5
|
Verfasst am: 17.04.2013, 11:15 Titel: |
|
|
Vielen dank ihr habt mir sehr weitergeholfen. Was dieses UDT genau ist versteh ich noch nicht wirklich aber dazu hat es ja genügend Tutorials. |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|