Danke für die Antwort.
Ich habe jetzt herumgebastelt und das hier kam dabei heraus:
Delphi-Quellcode:
TSortEdgeArray = class(TSortBaseClass)
protected
function Compare(Index1, Index2: Integer): Integer; override;
procedure Exchange(Index1, Index2: Integer);override;
public
EdgeArray : PEdgeArray;
end;
TEdgeArray = array of TEdge;
PEdgeArray = ^TEdgeArray;
var Edgelist: TEdgeArray;
und die funktionen compare und exchange habe ich wie folgt abgeändert:
Delphi-Quellcode:
function TSortEdgeArray.Compare(Index1, Index2: Integer): Integer;
begin
if EdgeList[Index1].KX > EdgeList[Index2].KX then // erstmal nur die KX'e im Array
Result := 1
else if EdgeList[Index1].KX < EdgeList[Index2].KX then //s.o.
Result := -1
else
Result := 0;
end;
und
Delphi-Quellcode:
procedure TSortEdgeArray.Exchange(Index1, Index2: Integer);
var
t : TEdge;
begin
t := EdgeList[Index1];
EdgeList[Index1] := EdgeList[Index2];
EdgeList[Index2] := t;
end;
Das habe ich jetzt auch irgendwie zum laufen bekommen...
Aber die Sortierung ist nicht 100% korrekt, sie wird jedesmal besser wenn man sie mehrmals durchführt aber ich kann nicht erkennen wieviele Durchläufe notwendig sind, bis 100% genauigkeit erzielt wurden.
Ist das eine Eigenart des Quicksort oder habe ich einen anderen Fehler?