Sortierung. STL (Teil 12)

Bewerten Sie diesen Artikel




Sortieranlage in c ++, stlEs ist eine besondere Gruppe von Sortieralgorithmen machen - in der Praxis ist es notwendig, eine Vielzahl von Objekten und auf einer Vielzahl von Kriterien zu sortieren. Eine Analyse der Sortieralgorithmen sind gut und gründlich untersucht, Mehr als jeder andere Abschnitt für Numerische Mathematik. Das Hauptproblem aller Sortieralgorithmus ist die Rechenkomplexität - die Zahl der Vergleich Austauschoperationen, erforderlich, um eine Sequenz der Länge N Sortier, sogenannte O( N ).

Der unangenehme Tatsache ist, dass, dass die durchschnittliche Komplexität der verschiedenen Algorithmen für unterschiedliche (auf den meisten Testsequenzen) und die maximale Komplexität (im schlimmsten Fall für ein Verfahren zur Prüfsequenz). Für mehrere zehn Sortieralgorithmen, beim Lernen Programmierung angeboten, gezeigt, dass die überwiegende Mehrheit von ihnen (intuitiv) Es ist das schlechteste in Bezug auf die durchschnittliche und in Bezug auf die maximale Komplexität. Als Beispiel, beliebt bei Studenten bubble-sort Es ist die schlimmste aller allgemein bekannt.

wirksam (Komplexität) die ganze Reihe von Methoden sind nur ein paar Methoden der schnellen rekursiven Sortier. Sie werden dann zu den STL-Implementierungen von Algorithmen vorgestellt. Standards bestehen nicht darauf, auf eine harte Einschränkung für inländische Mechanismen für deren Umsetzung, Daher kann es möglich sein, abhängig von der Bibliothek.

jetzt, mit etwas Wissen über Algorithmen, Funktors und der allgemeine Stand der Dinge mit Sortier, wir sind bereit, Optionen zu prüfen, für all dies in Ihrem Code Umsetzung. Um eine Vielzahl von Möglichkeiten, wie wir Art numerischer Reihenfolge starten. Beispiel Velikon, aber es ist nicht nur, und als, Zur Veranschaulichung der, für eine nachfolgende Selbstversuch:

Bevor Sie das Programm kompilieren, in MVS drücken Sie Alt + F7 und geben Sie den Befehl Argumente ?30 +3:Sortieranlage in c ++

Некоторая громоздкость примера связана с тем, dass wir in der gleichen Code sind und vereinen alle zur Verfügung gestellt STL Sortieralgorithmen, und eine Vielzahl von Test sortierten Sequenz, beispielsweise:

  • Mehrere Zufalls (?) Sequenzen der Länge 30, sortierbar mit (3) Funktors Vergleich, und detaillierte (+) Terminal Eingangs- und Ausgangssequenzen:

    Sortieranlage in c ++

  • Inverted (umkehren, abnehmend) Folge, sortierbar (6) "Heap" einen binären Baum mit (аргументы команды -30 +6 ):Sortieranlage in c ++

  • lang (1000000) Folge, die gleiche, vorigen Fall, Bedingungen, sondern nur mit dem Abschluss der Richtigkeit der Diagnoseergebnisse (аргументы команды -1000000 6 ):

    Sortieranlage in c ++

Die STL-Angebote 3 Gruppensortieralgorithmen:

  • Sortieren() – die schnellste Sortierung im Durchschnitt ( das( N * Log( N ) ), aber das kann "Fall" im schlimmsten Fall zu O( N * N ) (und es ist ein sehr schlechter Indikator);

  • sort_heap() – Sortierung "auf dem Heap", Verwendung eines binären Baums, deren Komplexität immer nicht schlechter als O( N + N * Log( N ) ) (es noch schlimmer Sortieren() im mittleren, sondern schlimmsten Fall);

  • stable_sort() – "Stabil" merge sort, was bedeutet, Stabilität, dass es behält die relative Reihenfolge der Elemente gleich nach dem Sortieren. Es ist manchmal sehr wichtig,. Die Komplexität dieses Algorithmus ist viel inferior Sortieren();

Verwenden Sie den Algorithmus, Das ist am besten mit den Zwängen des Problems.

Newsletter neue Lektionen über die Programmierung:

Öl

Etwa Öl

praktische Erfahrungen über die Softwareentwicklung 40 Jahre. Lehrer Globale Logik internationales Softwareunternehmen. IBM Developer Works Permanent Autor von Publikationen. Wissenschaftliche Herausgeber der Computerliteratur-Verlag "Symbol-Plus", Sankt Petersburg.

Hinterlasse eine Antwort

Platz Code in Tags: <pre class="lang:c ++ dekodieren:true ">DEIN CODE</Vor>