![]() |
Array sortieren
Hallo,
vorweg, ich zähle mich immernoch zu den absoluten Programmieranfängern. Also freue ich mich über leicht verständliche, gut kommentierte und am besten bebeispielte Antworten! So nun zum Problem: ich habe folgendes record:
Delphi-Quellcode:
Nun habe ich ein array of TEdge:
type
TEdge = packed record KX, KY, KZ: GLFloat; vi1,vi2: cardinal; end;
Delphi-Quellcode:
da können schonmal paar hundertausend einträge drin sein.
var Edgelist: array of TEdge;
Die muß ich sortieren. Weil es so viele Einträge sein können muß die Sortierung effizient sein. Recherchieren auf dieser Seite und Forensuche hat mich darüber aufgeklärt das dafür wohl "Quicksort" zu nehmen ist. Dafür gibt es in der library diese "Basisklasse" ![]() dort ist auch ein Beispiel für ein einfaches array of integer drin, das ich zum laufen bekommen habe. was mich als Anfänger jetzt aber überfordert ist folgende Aussage aus der Beschreibung: Zitat:
Aber was ist mit "abgeleitete klasse" gemeint und wie überschreibe ich Compare und Exchange? wie gesagt wäre super wenn mir da jemand helfen könnte! Danke! |
Re: Array sortieren
Eine Abgeleitete Klasse ist z.B. das hier:
Delphi-Quellcode:
TBasis=class
{Irgendwas...} end; TAbleitung=class(TBasis) {Sachen die noch zu den sachen von TBasis dazu kommen sollen} end; |
Re: Array sortieren
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:
und
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;
Delphi-Quellcode:
Das habe ich jetzt auch irgendwie zum laufen bekommen...
procedure TSortEdgeArray.Exchange(Index1, Index2: Integer);
var t : TEdge; begin t := EdgeList[Index1]; EdgeList[Index1] := EdgeList[Index2]; EdgeList[Index2] := t; end; 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? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz