Mit Deinem Konstrukt musst Du Quicksort entsprechend
dem Typ TKarte anpassen so wie unten funktioniert das nicht direkt.
Delphi-Quellcode:
Type
TIntegerArray=Array
of integer;
procedure QuickSortint2(
var A,oldindex: TintegerArray; iLo, iHi: Integer);
//Var ändert die übergebene Variable direkt!!!
var
Lo, Hi, Mid, T,Tindex: Integer;
IndexList:
Array of integer;
L1_,cnt1_:integer;
begin
while (Length(A)<1)
do exit;
Lo := iLo;
Hi := iHi;
Mid := A[(Lo + Hi)
div 2];
repeat
while A[Lo] < Mid
do Inc(Lo);
while A[Hi] > Mid
do Dec(Hi);
if Lo <= Hi
then
begin
T := A[Lo];
Tindex:=oldindex[Lo];
A[Lo] := A[Hi];
oldindex[Lo]:=oldindex[Hi];
A[Hi] := T;
oldindex[Hi]:=Tindex;
Inc(Lo);
Dec(Hi);
end;
until Lo > Hi;
if Hi > iLo
then
QuickSortInt2(A,oldindex, iLo, Hi);
if Lo < iHi
then
QuickSortInt2(A,oldindex, Lo, iHi);
end;
A ist dann die temporäre Werteliste und oldindex die Indexliste von Blatt bzw. TBlatt bzw Wert.
Dann wäre nach dem sortieren oldindex[0] der index des Blattes mit dem niedrigsten Wert.
Für Oldindex verwendest Du natürlich eine eigene Integerliste ,die direkt durch den Var Parameter in
der Procedure geändert wird.Nicht so elegant wie direkt die Werte zu sortieren aber vorerst am einfachsten:
Du legst Du 2 neue Listen an. 1.mit den Werten,2. mit den Indexen (0,1,2,3...)
und verwendest anschliessend die neue Indexliste die die alten Indexe/Indizes (sortiert) enthält.