Einzelnen Beitrag anzeigen

Benutzerbild von Jan
Jan

Registriert seit: 24. Sep 2002
Ort: Magdeburg
491 Beiträge
 
Delphi 7 Enterprise
 
#1

Array of tstringlist per quicksort sortieren

  Alt 13. Feb 2003, 20:44
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
Jan
Wenn die Sonne der Kultur tief steht, werfen auch kleine Gestalten lange Schatten.
  Mit Zitat antworten Zitat