Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Array sortieren!
mars - Fr 21.02.03 00:21
Titel: Array sortieren!
Guten Tag
Ich hab folgendes Problem: Ich hab ein eindimensionales Array des Record-Typs definiert:
Quelltext
1: 2: 3: 4: 5:
| type CarRec = record name: String; length: Integer; end; |
und
Quelltext
1:
| Auto = Array[1..1000] of CarRec; |
und
Nun möchte ich diesen Array nach auto.rec sortieren. Dazu verwende ich den Quicksort-Algorithmus:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure QuickSort(A: Array of CarRec; iLo, iHi: Integer); var Lo, Hi, Mid: Integer; begin Lo := iLo; Hi := iHi; Mid := A[(Lo + Hi) div 2].Height; repeat while A[Lo].Height < Mid do Inc(Lo); while A[Hi].Height > Mid do Dec(Hi); if Lo <= Hi then begin Exchange(A[Lo], A[Hi]); Inc(Lo); Dec(Hi); end; until Lo > Hi; if Hi > iLo then QuickSort(A, iLo, Hi); if Lo < iHi then QuickSort(A, Lo, iHi); end; |
Nun rufe ich die prozedur folgendermassen auf:
Quelltext
1:
| Quicksort(MeinAuto,min,max); |
Natürlich weiss ich auch, dass es so nicht funktionieren kann, da ja MeinAuto so überhaupt nicht verändert wird. Ich habe aber keine Ahnung, wie das (wahrscheinlich mit Zeigern?) funktionieren soll.
Hat irgendjemand einen Tipp? Ich wäre sehr dankbar...
Danke im Voraus
Udontknow - Fr 21.02.03 10:19
Äh, wieso soll das nicht funktionieren können? Du musst doch tatsächlich einfach nur die Inhalte in der Routine Exchange vertauschen.
Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure Exchange(A,B:CarRec); var TempAuto:CarRec; begin TempCar:=A; A:=B; B:=TempCar; end; |
Cu, :)
Udontknow
mars - Fr 21.02.03 11:17
genau so sieht auch meine Prozedur Exchange aus, aber am Array selber verändert sich nichts.
Bist du denn sicher, dass man das nicht mit Zeigern lösen sollte?
smiegel - Fr 21.02.03 11:20
Hallo,
versuche es einmal mit:
procedure QuickSort(var A:Array of CarRec; iLo, iHi: Integer);
mars - Fr 21.02.03 17:25
Titel: SUPER!
@smiegel: Ganz grossen Dank! hat wunderbar geklappt! :D
Ähm, könntest du mir auch noch verraten, weshalb? Ich habe in der Hilfe gesucht, aber nichts zu diesem Thema gefunden...Was macht eine Funktion anders, wenn sie var vor den Parametern hat?
Udontknow - Fr 21.02.03 17:45
Hehe, manchmal sind es eben die kleinen Fehler... :roll:
var bewirkt, das die an die Prozedur oder Funktion übergebene Variable verändert zurückgegeben werden kann.
Ohne var kannst du zwar dein Array verändern (in dem Falle sortieren), sobald aber die Prozedur beendet ist, ist es so, als wäre nichts geschehen.
Cu,
Udontknow
mars - Fr 21.02.03 18:10
aber aus kleinen fehlern lernt man oft sehr viel... :wink:
Thx auf jeden Fall!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!