Zitat von
hoika:
Kann man das auch über Quicksort machen ?
Zur Zeit behelfe ich mich mit einer sortierten Liste (nach Startdatum aufwärts)
und Rückwärtssuche, bis ein Eintrag mit Startdatum<=Testdatum gefunden wurde.
Wie sucht man nach solchen Einträgen ?
HI,
ich glaube da ist ein wenig was durcheinander gekommen, was möchtest du denn mit Quicksort machen? Suchen <> Sortieren, Quicksort = Sortieren
Sortieren kannst du auf jeden Fall per Quicksort, da stellt TList dir eine einfache Möglichkeit zur Verfügung, die eigentlich nur einen Quicksort implementiert. Du musst allerdings sagen, wie verglichen wird (schließlich speicherst du nur Zeiger). Was du machen musst ist einfach eine Methode vom Typ TSortCompare implementieren und an List.Sort übergeben.
Delphi-Quellcode:
TDeinElement = record
date : TDate;
value : Integer;
end;
function compare(Item1, Item2: Pointer): Integer;
begin
if TDeinElement(Item1).date < TDeinElement(Item1).date then
begin
result := 1;
end
else if TDeinElement(Item1).date = TDeinElement(Item1).date then
begin
result := 0;
end
else
begin
result = -1;
end;
end;
Na ja, wenn du jetzt ein Element suchst, dann kannst du einfach deine Liste sortieren (die Funktion sort aufrufen und als Argument die Methode compare übergeben). Dann hast du schon mal eine sortierte Liste.
Um jetzt ein Element zu finden kannst du einfach binär suchen. Du nimmst das Element in der Mitte und schaust ob es deinem Datum entspricht oder kleiner bzw. größer ist.
Hast du das Datum gefunden bist du fertig. Ansonsten suchst du rekursiv in dem halben Feld weiter. Irgendwann gibt es nur die Möglichkeit, dass nur noch ein Datum übrig bleibt.
Gruß Der Unwissende