Ok ich habe das Ganze jetzt gelöst, indem ich einfach die Werte aus meiner Hauptliste in eine Temporäre Liste geordnet eingefügt habe.
Das ganze funktioniert einwandfrei und der Zeitaufwand geht auch noch.
Der Speicheraufwand bleibt wie vorher, da ich einsortierte Werte sofort aus der Hauptliste lösche.
die Doppelte Verkettung hat sich damit auch erledigt, da ich diese nur für Quicksort implementiert hatte
Hier mein Code:
Delphi-Quellcode:
procedure sort;
var help:ptoLe; // Hilfspointer to Listenelement
tmp:TDliste; // Hilfsliste
begin
neu(tmp);
while leer(mylist)=false do
begin
geordnet_einfuegen(tmp,mylist.Value); // werte in Hilfsliste packen
vorne_loeschen(mylist); // aus Liste Loeschen
end;
mylist := tmp; // Pointer der Mainlist auf die Templiste umsetzen
end;
Delphi-Quellcode:
procedure geordnet_einfuegen(var anker:PtoLe;Value:TsetOfReal);
var help,tmp:PtoLe;
begin
if leer(anker) = true then // 1. Sonderfall: Liste Leer
hinten_anfuegen(anker,Value)
else
begin
help := anker; // Hilfspointer setzen
if help.Value.Getanzahl >= Value.Getanzahl then // 2. Sonderfall: an erster Stelle muss eingefügt werden
begin
new(tmp);
tmp.Value := Value;
tmp.next := anker;
anker := tmp;
end
else
begin
while (help.next <> nil) and (help.next.Value.Getanzahl < Value.Getanzahl) do
help := help.next; // Ansonsten durchgehen und schauen wo man einfügen kann
if help.next <> nil then
begin
new(tmp);
tmp.Value := Value;
tmp.next := help.next;
help.next := tmp;
end
else
hinten_anfuegen(anker,Value); // Sonderfall: letzte Stelle
end;
end;
end;
Somit wäre das erledigt.
Bin aber immer noch für Verbesserungen offen.