Ich versuche einen Sortieralgorithmus zu verwenden, der wie folgt aussieht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| procedure QSort(l,r: integer; var h: ThnArray); var i,j: byte; eintrag: integer; hilfe: THareNiemeyer; begin i := l; j := r; eintrag := h[(l+r) div 2].Rest; repeat while (h[i].Rest < eintrag) do inc(i); while eintrag < h[j].Rest do dec(j); if i <= j then begin hilfe := h[i]; h[i] := h[j]; h[j] := hilfe; inc(i); dec(j); end; until i>j;
if l<j then QSort(l,j,h); if r>i then QSort(i,r,h); end; |
THNarray ist definiert als array of THareNiemeyer. Das im konkreten Fall übergebene Array ist dynamisch (vermutlich ist das die Ursache für das Problem). THareNiemeyer ist ein Record mit einem string, einem real und 2 integer-Werten.
An der bezeichneten Stelle versuche ich, zwei Records innerhalb des Arrays auszutauschen. Dazu habe ich mir gedacht, ich lege die Variable hilfe an, welche ja vom gleichen Typ ist wie die einzelnen Elemente des Arrays (theoretisch). Die Zuweisungsreihenfolge erklärt sich wohl selbst.
Nachdem ich mehrfach Laufzeitfehler hatte (AccessViolation und ungültige Zeigeroperation) habe ich mal testweise ein "if hilfe = h[i]" eingefügt. Dann meckert aber der Compiler, die beiden Typen wären inkompatibel. Sogar "if h[j] = h[i]" geht nicht. Aber offensichtlich sind sie ja zumindestens zuweisungskompatibel, denn da hat er ja klaglos übersetzt.
Ich wüsste nun gern, von welchem Typ diese Elemente im (dynamischen) Array wirklich sind und warum sie nichtmal untereinander verglichen werden können...