Hi,
Zitat von
Neutral General:
... Hab mich
hieran ... orientiert. ...
ich komme zu folgendem Ergebnis, wenn ich den Wikipedia-Algorithmus implementiere - ich habe versucht so viel wie möglich von deinem Code beizubehalten:
Delphi-Quellcode:
procedure SortArray(
var CombiArray: TCombis; l, r: Integer);
function Divide(l, r: Integer): Integer;
procedure Exchange(s,t: Integer);
var tmp: TList;
begin
tmp := CombiArray[s];
CombiArray[s] := CombiArray[t];
CombiArray[t] := tmp;
end;
var
pivot: Integer;
begin
// Dec(l); // muss wech!
pivot := r;
while l < r
do
begin
while CombiArray[l].Count < CombiArray[pivot].Count
do
Inc(l);
while (l < r)
and (CombiArray[r].Count > CombiArray[pivot].Count)
do
Dec(r);
if l < r
then
Exchange(l, r);
end;
Exchange(l, pivot);
Result := l;
end;
Du hast dich offensichtlich von der visuellen Ähnlichkeit des Pseudo-Codes "wiederhole block solange bedingung" mit einer REPEAT-Schleife täuschen lassen. Tatsächlich ist es aber eine WHILE-Schleife.
Freundliche Grüße