Hallo, ich hab den algorithmus nicht ganz auf mein ding anwenden können, deswegen hab ich jetz einen eigenen geschrieben, der eine binäre Suche durchführt (glaube ich jedenfalls).
Der sieht allerdings schrecklich aus, weswegen ich den euch mal zeigen möchte, sodass ihr daran (konstruktive) Kritik üben könnt!
Zur Erklärung: Ich habe ein Objektklasse Tauto, diese hat eine eigenschaft Pos, die man mit GibPos abrufen kann. Alle Autos in der Liste sollen nun gemäß ihrer Position eingefügt werden. Die Liste vom Typ Tlist heißt Liste.
Delphi-Quellcode:
procedure tautolist.addauto (auto: tauto);
var
i,mini,maxi:integer;
begin
i:=round(Liste.Count/2);//Der derzeitige Punkt in der Liste
maxi:=round(Liste.Count);//der derzeitige höchste Punkt
mini:=1; // der derzeitige niedrigste Punkt.
begin
while (((tauto(Liste.Items[i-1]).GibPos >auto.GibPos)or //wenn Pos des vorherigen zu groß
(auto.GibPos> tauto(Liste.Items[i+1]).GibPos))=true)// oder Pos des nächsten zu klein
and(((Liste.Items[i]<>Liste.Last)and(Liste.Items[i]<>Liste.First))=true) do //und wenn nicht am ende oder anfang angekommen
begin
begin
if (tauto(Liste.Items[i+1]).GibPos <auto.GibPos)then //wenn derzeitiger Punkt zu groß
begin
maxi:=i;
i:=round((maxi-mini)/2);
end;
if (auto.GibPos< tauto(Liste.Items[i-1]).GibPos)then //wenn derzeitiger Punkt zu klein
begin
mini:=i;
i:=round((maxi-mini)/2);
end;
end;
Liste.Insert(i,auto);
end;
end;
end;