Hallo
DP,
mein Problem schildert sich wie folgt:
Ich habe ein 2-dimensionales dynamisches array, welches so definiert ist:
Code:
workarray : array of tstringlist;
Und nun will ich anhand eines Kriteriums in den stringlists meinen array (z.B. workarray[i][2]) sortieren, undzwar per quicksort.
Ich sortiere also nicht einfach nur array[i] sondern ich sortiere array[i] anhand von dem was in array[i][2] steht.
Ich habe dazu den Code aus der
DP-Code library für quicksort umgeschrieben, und erhalte dies:
Code:
Procedure tform1.QuickSort( l,r : Integer );
var i : Integer;
Begin
If (r > l) Then
Begin
i:= Partition( l, r);
QuickSort( l, i-1 );
QuickSort( i+1, r );
End;
End;
Function tform1.Partition( l,r : Integer ) : Integer;
var i,j : Integer;
v : string;
t : tstringlist;
Begin
t:=tstringlist.Create;
v:= workarray[r][1];
i:= l-1;
j:= r;
Repeat
Repeat inc( i ); Until (workarray[i][1] >= v);
Repeat
dec( j ); Until (workarray[j][1] <= v);
t:= workarray[i]; workarray[i]:= workarray[j]; workarray[j]:= t;
Until (j<=i);
workarray[j]:= workarray[i]; workarray[i]:= workarray[r]; workarray[r]:= t;
Result:= i;
t.free;
End;
Im Moment bekomme ich einen Fehler, der so heisst:
"Listenindex überschreitet das Maximum (1)".
könnte mir vielleicht jemand sagen woher das kommt? Und wenn ich das weiss, koennte mir dann vielleicht auch noch jemand sagen, ob das so, wie ich das da geschrieben habe überhaupt klappen kann?
Gruß
Jan