2009-08-25 15 views
1

Die beste Möglichkeit, ein Array in Delphi zu sortieren, ist "alphanumerisch".Delphi Array Elemente alphanumerische Sortierreihenfolge?

fand ich diesen Kommentar in einem alten Code meiner Anwendung

„Die Elemente dieses Arrays aufsteigend sein müssen, alphanumerische Sortierreihenfolge.“

Wenn ja, was ist der Grund dafür?

-Vas

+0

Bitte verfeinern Sie Ihre Frage. Fragen Sie nach dem Sortieren im Allgemeinen (Ihr erster Satz) oder nach Ihrer Bewerbung? Wenn letzteres, was macht die Anwendung mit dem Array? Vielleicht müssen Sie das in mehr als eine Frage aufteilen. – Argalatyr

+0

Ich spreche über das Sortieren im Allgemeinen. – vas

Antwort

5

Es gibt keine „beste“ Art und Weise, wie die Elemente eines Arrays zu sortieren (oder eine Sammlung für diese Tatsache). Sort ist ein humanisiertes Merkmal (Dinge werden normalerweise nicht sortiert), also vermute ich, dass der Kommentar mehr damit zu tun hat, was dein Programm erwartet.

Konkreter gibt es wahrscheinlich anderen Codeabschnitt anderswo, die erwarten, dass die Array-Elemente alphanumerisch sortiert werden. Es kann so einfach sein, wie es in einem bereits geordneten TreeView angezeigt wird, damit der aufrufende Code das Array nicht erst sortieren muss.

Arrays werden als zusammenhängende Speicherzuweisung dargestellt, sodass der Zugriff schnell ist. Intern ruft der Compiler einfach GetMem auf und fragt nach SizeOf (Type) * array size. Die Art und Weise, wie die Elemente sortiert sind, beeinflusst die Leistung oder die Speichergröße der Arrays im Allgemeinen nicht. Es muss in der Programmlogik sein.

+0

Dieses Commet, das ich erwähnte, wurde vor allen Arrays gesetzt, die "alphanumerische Zeichen" im gesamten Code verwendeten – vas

+0

Nun, es gibt keinen besonderen Grund dafür, Sortierung immer Zeit und wenn etwas Ihre Leistung treffen wird, besonders wenn Sie etwas sortieren das muss nicht sort sein. –

2

Nein, es gibt keinen "besten Weg" zum Sortieren. Und das ist einer der Gründe, warum es mehrere Sortiertechniken gibt.
Mit QuickSort, bieten Sie sogar die Vergleichsfunktion, wo Sie bestimmen, welche Reihenfolge Sie letztlich wollen.

+2

Obwohl es keine universelle beste Sortiermethode gibt, ist QuickSort tatsächlich der UNIVERSELLE BESTE WEG, um eine Sammlung im durchschnittlichen Fall (und in den meisten praktischen Fällen) zu sortieren, und das wurde mathematisch bewiesen. Es gibt andere Sortiermethoden, die beste Worst-Case-Leistung bieten oder die "stabile Sortierungen" sind, aber im Allgemeinen ist schnelle Sortierung der beste Sortieralgorithmus (abgesehen von Quantum Computing und all dem) –

+0

Mein Punkt genau, mit QuickSort müssen Sie angeben die Regel, um Artikel A vor Artikel B nach Ihren Bedürfnissen zu platzieren. –

1

Das Sortieren eines Arrays ist nützlich, wenn Sie versuchen, eine binäre Suche im Array durchzuführen. Eine binäre Suche kann im Vergleich zu anderen Methoden extrem schnell sein. Wenn der Sortierfehler jedoch falsch ist, kann die Suche den Datensatz nicht finden. Andere Gründe, um Arrays sortiert zu halten, sind fast immer aus kosmetischen Gründen, um zu entscheiden, wie das Array an eine Ausgabe gesendet wird.

Der beste Weg, um ein Array neu zu ordnen, hängt von der Länge des Arrays und dem Typ der darin enthaltenen Daten ab. Ein QuickSort-Algorithmus würde in den meisten Fällen ein schnelles Ergebnis liefern. Delphi verwendet es intern, wenn Sie mit String-Listen und einigen anderen Listen arbeiten. Frage ist, müssen Sie wirklich sortieren? Muss es wirklich ein Array bleiben?

Aber die beste Möglichkeit, ein Array sortiert zu halten, besteht darin, es vom ersten Element aus sortiert zu halten, das Sie hinzufügen! Im Allgemeinen schreibe ich einen Wrapper um meine Array-Typen, die dafür sorgen, dass das Array geordnet bleibt. Die "Add" -Methode sucht nach dem größten Wert im Array, der kleiner oder gleich dem Wert ist, den ich hinzufügen möchte. Ich füge dann das neue Element direkt nach dieser Position ein. Für mich wäre das die beste Lösung. (Bei großen Arrays können Sie die binäre Suchmethode erneut verwenden, um den Speicherort zu finden, an dem Sie den neuen Datensatz einfügen müssen. Es ist langsamer als das Anhängen von Datensätzen, aber Sie müssen sich nicht fragen, ob es sortiert ist oder nicht.

3

Meistens wird ein Array sortiert, um schnellere Suchzeiten zu liefern.Nach einer Liste der Länge L kann ich mit dem Mittelpunkt (L DIV 2) vergleichen und schnell bestimmen, ob ich die größere Hälfte oder die kleinere Hälfte, und rekursiv weiter mit diesem Muster, bis ich entweder nichts zu teilen habe oder habe meine Übereinstimmung gefunden.Dies ist, was eine binäre Suche.Wenn die Liste nicht sortiert ist, dann ist diese Art von Operation nicht verfügbar und stattdessen I Ich muss jeden Punkt in der Liste überprüfen, bis ich das Ende erreicht habe.