2009-04-07 1 views
2

Von Zeit zu Zeit stoße ich auf manuell implementierte Sortier- und/oder Suchalgorithmen, anstatt in Sprache implementierte Algorithmen zu verwenden. Der meiste Quellcode, den ich untersucht habe, ist in Java, C# oder PHP geschrieben - aber ich denke, dieses Phänomen ist sprachunabhängig.Implementieren von Sortier- und/oder Suchalgorithmen - wo und warum

In Bezug auf regelmäßige Datenstrukturen wie Listen; Warum und wo implementieren Sie Ihren eigenen Algorithmus? Ideologische Gründe? Speicher effizienter? Kann die Idee, integrierte Funktionen zu verwenden, nicht ertragen? Java verwendet vorzugsweise mergesort (in Collections.sort()), was einige Gemeinkosten hat, wenn Sie es mit Quicksort als Beispiel vergleichen. Wenn Sie einen Favoriten haben, den Sie regelmäßig für allgemeine Aufgaben verwenden, können Sie ihn gerne in Ihrer bevorzugten Sprache einreichen!

Antwort

1

In C++ können Sie einen Container mit einem Array innerhalb haben, das nur von Methoden des Containers durchsucht wird. Sie können eine Bibliotheksimplementierung verwenden, aber dann müssen Sie eine Komparatorklasse bereitstellen, und das ist die gleiche Menge an Code wie beim Schreiben einer for() -Schleife. Warum eine neue Entität (Vergleichsklasse) für einen solchen Fall produzieren?

+0

Dies ist die Art von Antwort, die ich gesucht habe! –

6
  • Nicht jeder Sortieralgorithmus wird von der Standardbibliothek implementiert.
  • Nicht unterstützt jede Sprache generische Datentypen/Container
  • Manchmal müssen Sie je nach Datengröße zwischen Sortieralgorithmen wechseln
  • Tweaking den Algorithmus für einen bestimmten Satz von Eingangs ist einfacher
  • Um die Prozessorgeschwindigkeit
  • messen
  • wiss
  • Just for fun

Dies sind nur einige der Gründe, ...

+0

Natürlich. Ich war mehr an verschiedenen Lösungen der Gemeinschaft interessiert. Die Frage wurde neu formuliert ... –

3

Bogosort:

while (!is_sorted(array)) { 
    randomly_shuffle(array); 
} 

Erwartete Laufzeit: (! N) O

:)

+0

Für eine optimale Leistung sollten Sie einen gleichmäßig verteilten Shuffle verwenden, z. B. Fisher-Yates. –

+0

Gute Idee. Idealerweise möchten Sie eine Quelle für echte Zufälligkeit, wie die Spannung über eine verrauschte Diode oder den Text aus den CodeSOD-Artikeln auf www.thedailywtf.com. –

1

in Sprachimplementierungen Errichtet werden in der Regel schneller sein, aber nur, wenn Sie sortieren/Standard suchen. Sobald Sie etwas Ungewöhnliches tun, sei es die Art und Weise, wie der Schlüssel interpretiert wird, mit mehreren Zeigern umgehen, sich in eine andere Umgebung einklinken und so weiter, können Sie die Leistung optimieren, indem Sie die grundlegenden Routinen an Ihre genauen Anforderungen anpassen.

Zum Beispiel musste ich drei große (riesige) Datensätze auf dem gleichen Schlüssel sortiert halten, also musste ich zurück zur Quelle gehen und den C-Quick-Sortiercode ändern, um Elemente auf drei verschiedenen Datenfeldern zu verschieben.