WikiDer > Direktauswahl sortieren

Straight selection sort

Es Sortieralgorithmusgerade auswahl sortieren findet immer das kleinste Element in einer Liste, um es mit dem Element zu tauschen, das dem vorherigen an der Spitze der Liste folgt.

Diese vielleicht etwas kryptische Beschreibung lässt sich am besten an einem Beispiel verdeutlichen: Die Zeile DCBA wird zunächst durch Austausch des ersten Elements ersetzt. d und das kleinste Element eineinCBd, dann durch Austausch des zweiten Elements C und das kleinste verbleibende Element BABCD, und danach ändert sich nichts.

Die Anzahl der erforderlichen Gleichungen für eine Sequenz der Länge n ist (n-1) (n-2) ... 1. Die Anzahl der erforderlichen Vertauschungen beträgt höchstens n-1.

Implementierungen

Implementierung in Java

Das untere Java-Code-Snippet sortiert die Array asKey alphanumerisch basierend auf Straight Selection:

zum(intich=0;ich<asKey.Länge-1;ich){ZeichenfolgesMin=asKey[ich];// kleinste Zeichenfolge (vorerst)intich bin dabei=ich;// Index des kleinsten Stringszum(intja=ich1;ja<asKey.Länge;ja){wenn(asKey[ja].vergleichen mit(sMin)<0){sMin=asKey[ja];ich bin dabei=ja;}}wenn(ich bin dabei!=ich){/* der kleinste String ist nicht an Position i, sondern weiter weg */asKey[ich bin dabei]=asKey[ich];asKey[ich]=sMin;}}

Implementierung in C

Ein Beispiel in C ("input" ist das zu sortierende Array, "length" ist die Anzahl der Elemente im Array):

Leeregerade auswahl(intEingang[],intLänge){intich,ja,kleinste,vorübergehend;zum(ja=0;ja<Länge-1;ja){kleinste=ja;zum(ich=ja1;ich<Länge;ich){wenn(Eingang[ich]<Eingang[kleinste])kleinste=ich;}wenn(kleinste!=ja){vorübergehend=Eingang[ja];Eingang[ja]=Eingang[kleinste];Eingang[kleinste]=vorübergehend;}}}

Umsetzung in Python

In Python wird dies zu:

Code

defAuswahlsortieren(Warteschlange):zumichimReichweite(len(Warteschlange)):Mindest=ich#Nimm die erste unsortierte Karte als kleinstezumjaimReichweite(ich,len(Warteschlange)):#Überlauf den Rest der unsortierten KartenwennWarteschlange[ja]<Warteschlange[Mindest]:Mindest=ja#Wenn es einen kleineren gibt, stelle seine Position auf das Minimum einWarteschlange[ich],Warteschlange[Mindest]=Warteschlange[Mindest],Warteschlange[ich]#Tausch die i-te Karte mit der kleinsten Karte