Hi,
Danke. Aber das Problem ist: Das funktioniert auch nicht. Bekomme in der Zeile
while CombiArray[l].Count < CombiArray[Pivot].Count do
irgendwann ne
AV. Ist eigentlich auch logisch bei ner while schleife weil da erst geprüft wird und dann ausgeführt.. d.h. man fängt mit CombiArray[-1] an, wohingegen man bei repeat bei 0 anfängt weil vorher geinct wird. Wenn ich das
dec weglasse hab ich ne Endlosschleife.
Naja hab das gefunden was unser Info-Lehrer uns gegeben hat:
*klick*
da wirds auch mit repeat gemacht und mit <= und >= ...
Mein Quelltext sieht jetzt so aus:
Delphi-Quellcode:
procedure SortArray(
var CombiArray: TCombis; l,r: Integer);
function Divide(l,r: Integer): Integer;
procedure Exchange(s,t: Integer);
var tmp: TPriceList;
begin
tmp := CombiArray[s];
CombiArray[s] := CombiArray[t];
CombiArray[t] := tmp;
end;
var pivot: Integer;
k: Integer;
begin
dec(l);
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);
{ Form1.ListBox1.Clear;
for k := 0 to High(CombiArray) do
begin
Form1.ListBox1.Items.Add(IntToStr(CombiArray[k].Count));
Application.ProcessMessages;
end;
sleep(10); }
end;
Exchange(l,pivot);
Result := l;
end;
var m: Integer;
begin
if r > l
then
begin
m := Divide(l,r);
SortArray(CombiArray,l,m-1);
SortArray(CombiArray,m+1,r);
end;
end;
Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."