![]() |
QuickSort: Zahlen wie gezählt sortieren
Hi,
ich benutze folgende QuickSort-Funktion:
Delphi-Quellcode:
Sie funktioniert mit Strings einwandfrei. Allerdings möchte ich anstelle von so etwas...
procedure QuickSort(var Arr : TDynItemArray; Start, Stop : Integer);
var Left, Right, Mid : Integer; Pivot : String; Tmp : TItem; begin Left := Start; Right := Stop; Mid := (Start+Stop) div 2; Pivot := LowerCase(Arr[Mid].Name); repeat while LowerCase(Arr[Left].Name) < Pivot do inc(Left); while Pivot < LowerCase(Arr[Right].Name) do dec(Right); if Left <= Right then begin Tmp := Arr[Left]; Arr[Left] := Arr[Right]; Arr[Right] := Tmp; inc(Left); dec(Right); end; until Left > Right; if Start < Right then QuickSort(Arr, Start, Right); if Left < Stop then QuickSort(Arr, Left, Stop); end;
Delphi-Quellcode:
...lieber die gewohnte Weise:
8
81 82 83 84 85 86 87 88 89 9 90 91 92 93 94 95 96 ...
Delphi-Quellcode:
Wie könnte man das realisieren ? Ich habe überhaupt keine Idee.
8
9 ... 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 ... |
Re: QuickSort: Zahlen wie gezählt sortieren
Du musst TDynItemArray von Strings auf Zahlen umstellen und entsprechend die .Name-Referenzen ändern. Die geänderte Sortierung wird dann automatisch durch die Operatoren erledigt.
|
Re: QuickSort: Zahlen wie gezählt sortieren
Und wie soll man das umstellen bzw. was genau meinst Du mit umstellen ?
|
Re: QuickSort: Zahlen wie gezählt sortieren
Anscheinend verwaltet das TDynItemArray Elemente vom Typ TItem, welcher wiederum Strings kapselt, auf welche mit TItem.Name zugegriffen wird. Wenn du Zahlen sortieren willst, solltest du TItem so ändern, dass Zahlen und nicht Strings verwaltet werden - oder du deklarierst direkt TItem als Alias für Integer oder Cardinal. Das .Name im Code der QuickSort-Funktion etnfällt dann.
|
Re: QuickSort: Zahlen wie gezählt sortieren
Ich lese einen Ordner aus und will diesen sortiert ausgeben. Ich bekomme also nichts außer Strings. Das sind die eigenen Typen:
Delphi-Quellcode:
type
TItem = record Pfad, Name, fTyp, Typ, Alter, DirSR : String; Index, ImageIndex : Integer; end; TDynItemArray = Array of TItem; |
Re: QuickSort: Zahlen wie gezählt sortieren
Und wie willst du dann Namen sortieren, die nicht nur aus Ziffern bestehen? Das ist nicht allzu intuitiv für den Nutzer.
|
Re: QuickSort: Zahlen wie gezählt sortieren
dann eben nicht.
|
Re: QuickSort: Zahlen wie gezählt sortieren
Das ist nicht optimal, da sich dann die Ergebnisse je nach Sortieralgorithmus unterschieden. Insbesondere ist die so definierte Relation nicht transitiv, denn '13' < '2a' < '3' < '13'.
|
Re: QuickSort: Zahlen wie gezählt sortieren
Erstelle einfach eine Funkton 'Compare', die zwei Namen miteinander so vergleicht, wie Du es gerne hättest.
|
Re: QuickSort: Zahlen wie gezählt sortieren
Hallo Nils,
in der CodeLib findest du Quelltexte zum Thema ![]() Gruß Hawkeye |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:13 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-2025 by Thomas Breitkreuz