Auswahl-Sorte

In der Informatik ist eine Auswahl-Sorte ein Sortieren-Algorithmus, spezifisch eine Vergleich-Sorte im Platz. Es hat O (n) Zeitkompliziertheit, es ineffizient auf großen Listen machend, und leistet allgemein schlechter als die ähnliche Einfügungssorte. Auswahl-Sorte wird für seine Einfachheit bemerkt, und hat auch Leistungsvorteile gegenüber mehr komplizierten Algorithmen in bestimmten Situationen besonders, wo Hilfsgedächtnis beschränkt wird.

Algorithmus

Der Algorithmus arbeitet wie folgt:

  1. Finden Sie den minimalen Wert in der Liste
  2. Tauschen Sie es mit dem Wert in der ersten Position
  3. Wiederholen Sie die Schritte oben für den Rest der Liste (an der zweiten Position anfangend und jedes Mal vorbringend)
,

Effektiv wird die Liste in zwei Teile geteilt: Die Subliste von Sachen hat bereits sortiert, der vom linken bis Recht aufgebaut wird und am Anfang und der Subliste von Sachen gefunden wird, die sortiert werden müssen, den Rest der Reihe besetzend.

Hier ist ein Beispiel dieses Sorte-Algorithmus, der fünf Elemente sortiert:

64 25 12 22 11

11 25 12 22 64

11 12 25 22 64

11 12 22 25 64

11 12 22 25 64

</pre>

(nichts scheint geändert auf dieser letzten Linie, weil die letzten 2 Zahlen bereits in der Ordnung waren)

Auswahl-Sorte kann auch auf Listenstrukturen verwendet werden, die machen, tragen bei und ziehen effizient wie eine verbundene Liste um. In diesem Fall ist es üblicher, das minimale Element vom Rest der Liste zu entfernen, und dann es am Ende der Werte sortiert bis jetzt einzufügen. Zum Beispiel:

64 25 12 22 11

11 64 25 12 22

11 12 64 25 22

11 12 22 64 25

11 12 22 25 64</pre>

/* [0] zu [n-1] ist die Reihe zur Sorte * /

interne Nummer iPos;

interne Nummer iMin;

/* bringen Sie die Position durch die komplette Reihe * / vor

/* (konnte iPos tun

Mathematische Definition

Lassen Sie, ein nichtleerer Satz und solch dass wo zu sein:

  1. ist eine Versetzung,
  1. für alle und,

\begin {Fälle }\

L, & \mbox {wenn} |L | = 1 \\

\{S\} \cup f (L_ {s}), & \mbox {sonst }\

\end {Fälle} </Mathematik>,

  1. ist das kleinste Element, und
  1. ist der Satz von Elementen ohne ein Beispiel des kleinsten Elements dessen.

Analyse

Auswahl-Sorte ist nicht schwierig, im Vergleich zu anderen Sortieren-Algorithmen zu analysieren, da keine der Schleifen von den Daten in der Reihe abhängt. Das Auswählen des niedrigsten Elements verlangt Abtastung aller n Elemente (das nimmt n  1 Vergleiche), und dann das Tauschen davon in die erste Position. Die Entdeckung des folgenden niedrigsten Elements verlangt Abtastung des restlichen n  1 Elemente und so weiter, für (n  1) + (n  2) +... + 2 + 1 = n (n  1) / 2 &isin; Θ (n) Vergleiche (sieh arithmetischen Fortschritt). Jedes dieses Ansehens verlangt einen Tausch für n  1 Elemente (das Endelement ist bereits im Platz).

Vergleich zu anderen Sortieren-Algorithmen

Unter dem einfachen durchschnittlichen Fall Θ (n) Algorithmen überbietet Auswahl-Sorte fast immer Luftblase-Sorte und Zwerg-Sorte. Einfügungssorte ist darin sehr ähnlich, nachdem die kth Wiederholung, die ersten k Elemente in der Reihe in der sortierten Ordnung sind. Einfügungssorte-Vorteil besteht darin, dass es nur so viele Elemente scannt, wie es braucht, um den k + 1. Element zu legen, während Auswahl-Sorte alle restlichen Elemente scannen muss, um den k + 1. Element zu finden.

Einfache Berechnung zeigt, dass Einfügungssorte deshalb gewöhnlich ungefähr halb so viel Vergleiche durchführen wird wie Auswahl-Sorte, obwohl es ebenso viele oder weit weniger abhängig von der Ordnung leisten kann, in der die Reihe vor dem Sortieren war. Es kann als ein Vorteil für einige Echtzeitanwendungen gesehen werden, dass Auswahl-Sorte identisch unabhängig von der Ordnung der Reihe leisten wird, während sich Einfügungssorte-Laufzeit beträchtlich ändern kann. Jedoch ist das öfter ein Vorteil für die Einfügungssorte, in der er viel effizienter läuft, wenn die Reihe bereits sortiert wird oder "in der Nähe vom sortierten."

Während Auswahl-Sorte der Einfügungssorte in Bezug auf die Zahl dessen vorzuziehend ist, schreibt (Θ (n) Tausch gegen &Omicron; (n) Tausch), es geht fast immer weit zu weit (und schlägt nie) die Zahl dessen schreibt, dass Zyklus-Sorte macht, weil Zyklus-Sorte in der Zahl dessen theoretisch optimal ist, schreibt. Das kann wichtig sein, wenn schreibt, sind bedeutsam teurer, als, solcher als mit EEPROM oder Blitz-Gedächtnis liest, wo jeder schreiben die Lebensspanne des Gedächtnisses vermindert.

Schließlich wird Auswahl-Sorte auf der größeren Reihe durch Θ außerordentlich überboten (n loggen n) teilen-und-überwinden Algorithmen wie mergesort. Jedoch sind Einfügungssorte oder Auswahl-Sorte beide normalerweise für die kleine Reihe (d. h. weniger als 10-20 Elemente) schneller. Eine nützliche Optimierung in der Praxis für die rekursiven Algorithmen soll auf die Einfügungssorte oder Auswahl-Sorte für "kleine genug" Sublisten umschalten.

Varianten

Heapsort verbessert außerordentlich den grundlegenden Algorithmus durch das Verwenden einer impliziten Haufen-Datenstruktur, um Entdeckung und das Entfernen der niedrigsten Gegebenheit zu beschleunigen. Wenn durchgeführt, richtig wird der Haufen erlauben, das folgende niedrigste Element in Θ zu finden (loggen Sie n) die Zeit statt Θ (n) für die innere Schleife in der normalen Auswahl-Sorte, die Gesamtlaufzeit auf Θ reduzierend (n loggen n).

Eine bidirektionale Variante der Auswahl-Sorte, genannt Cocktail-Sorte, ist ein Algorithmus, der sowohl die minimalen als auch maximalen Werte in der Liste in jedem Pass findet. Das vermindert die Anzahl des Ansehens der Liste durch einen Faktor 2, eine Schleife oben beseitigend, aber nicht wirklich die Anzahl gegen Vergleiche oder Tausch reduzierend. Bemerken Sie jedoch, dass sich Cocktail-Sorte öfter auf eine bidirektionale Variante der Luftblase-Sorte bezieht.

Auswahl-Sorte kann als eine stabile Sorte durchgeführt werden. Wenn, anstatt im Schritt 2 zu tauschen, der minimale Wert in die erste Position eingefügt wird (d. h. alle vorläufigen Sachen heruntergelassen), ist der Algorithmus stabil. Jedoch verlangt diese Modifizierung entweder eine Datenstruktur, die effiziente Einfügungen oder Auswischen wie eine verbundene Liste unterstützt, oder sie zum Durchführen Θ (n) führt, schreibt.

In der Bingo-Sorte-Variante werden Sachen durch das wiederholte Durchschauen der restlichen Sachen bestellt, um den größten Wert und das Bewegen aller Sachen mit diesem Wert zu ihrer Endposition zu finden. Wie das Zählen der Sorte ist das eine effiziente Variante, wenn es viele Doppelwerte gibt. Tatsächlich tut Auswahl-Sorte man führt die restlichen Sachen für jeden bewegten Artikel durch. Bingo-Sorte tut einen Pass für jeden Wert (nicht Artikel): Nach einem anfänglichen Pass, um den größten Wert zu finden, können die folgenden Pässe jeden Artikel mit diesem Wert zu seiner Endposition bewegen, während sie den folgenden Wert als im folgenden Pseudocode finden (Reihe ist bei Nullpunkteinstellung, und der für die Schleife schließt sowohl die Spitze als auch untersten Grenzen, als in Pascal ein):

Bingo (ordnen)

{Dieses Verfahren in aufsteigender Reihenfolge Sorten. }\

beginnen Sie

max: = Länge (A)-1;

{wird Die erste Wiederholung geschrieben, um sehr ähnlich den nachfolgenden, aber dem auszusehen

ohne Tausch. }\

nextValue: = [max];

weil ich: = max - 1 downto 0 tun

wenn [ich]> nextValue dann

nextValue: = [ich];

während (max> 0) und ([max] = nextValue) tun

max: = max - 1;

während max> 0 wirklich beginnen

Wert: = nextValue;

nextValue: = [max];

weil ich: = max - 1 downto 0 tun

wenn [ich] = schätzt, dann beginnen

Tausch ([ich], [max]);

max: = max - 1;

enden Sie sonst wenn [ich]> nextValue dann

nextValue: = [ich];

während (max> 0) und ([max] = nextValue) tun

max: = max - 1;

Ende;

Ende;

</Quelle>

So, wenn durchschnittlich es mehr als zwei Sachen mit jedem Wert gibt, wie man erwarten kann, ist Bingo-Sorte schneller, weil es die innere Schleife weniger Male durchführt als Auswahl-Sorte.

  • Donald Knuth. Die Kunst der Computerprogrammierung, Bands 3: Sortierend und Suche, die Dritte Ausgabe. Addison-Wesley, 1997. Internationale Standardbuchnummer 0-201-89685-0. Seiten 138-141 des Abschnitts 5.2.3: Das Sortieren durch die Auswahl.
  • Anany Levitin. Einführung ins Design & die Analyse von Algorithmen, 2. Ausgabe. Internationale Standardbuchnummer 0-321-35828-7. Abschnitt 3.1: Auswahl-Sorte, Seiten 98-100.
  • Robert Sedgewick. Algorithmen in C ++, Teile 1-4: Grundlagen, Datenstruktur, das Sortieren, die Suche: Grundlagen, Datenstrukturen, das Sortieren, Pts Suchend. 1-4, die Zweite Ausgabe. Addison-Wesley Longman, 1998. Internationale Standardbuchnummer 0-201-35088-2. Seiten 273-274

Außenverbindungen


Sweeney Todd / Syracuse Universität
Impressum & Datenschutz