Ich habe jetzt 2 Versuche gestartet der erste schlägt mit einer Zugriffsverletztung fehl.
Delphi-Quellcode:
//Dateien sortieren
countTo := Length(Files);
//Änderung
k := countTo
div 2;
while (k > 0)
do begin
for i := 0
To countTo - k
do begin
j := i;
while (j >= 0)
and (Files[j].SortStr < Files[j+k].SortStr)
do begin
//Elemente austauschen
exchg := Files[j];
Files[j] := Files[j+k];
Files[j+k] := exchg;
if j > k
then Dec(j,k)
else j := 0;
end;
{while}
end;
{for}
k := k
div 2;
end;
{while}
Die zweite Änderung bezieht sich auf deinen Vorschlag, dies scheint soweit zu klappen.
Delphi-Quellcode:
//Dateien sortieren
countTo := High(Files);
k := Length(Files)
div 2;
//Änderung, das gleiche wie High(Files) - Low(Files) + 1
while (k > 0)
do begin
for i := 0
To countTo - k
do begin
j := i;
while (j >= 0)
and (Files[j].SortStr < Files[j+k].SortStr)
do begin
//Elemente austauschen
exchg := Files[j];
Files[j] := Files[j+k];
Files[j+k] := exchg;
if j > k
then Dec(j,k)
else j := 0;
end;
{while}
end;
{for}
k := k
div 2;
end;
{while}