<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Selectionsort</id>
	<title>Selectionsort - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Selectionsort"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Selectionsort&amp;action=history"/>
	<updated>2026-05-29T16:57:54Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Selectionsort&amp;diff=1141607&amp;oldid=prev</id>
		<title>imported&gt;Horst Gräbner: Änderungen von ~2026-15690-88 (Diskussion) auf die letzte Version von 2001:9E8:B326:F000:3943:7460:6659:8E95 zurückgesetzt</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Selectionsort&amp;diff=1141607&amp;oldid=prev"/>
		<updated>2026-03-12T11:38:35Z</updated>

		<summary type="html">&lt;p&gt;Änderungen von &lt;a href=&quot;/index.php/Spezial:Beitr%C3%A4ge/~2026-15690-88&quot; title=&quot;Spezial:Beiträge/~2026-15690-88&quot;&gt;~2026-15690-88&lt;/a&gt; (&lt;a href=&quot;/index.php?title=Benutzer_Diskussion:~2026-15690-88&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Benutzer Diskussion:~2026-15690-88 (Seite nicht vorhanden)&quot;&gt;Diskussion&lt;/a&gt;) auf die letzte Version von &lt;a href=&quot;/index.php?title=Benutzer:2001:9E8:B326:F000:3943:7460:6659:8E95&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Benutzer:2001:9E8:B326:F000:3943:7460:6659:8E95 (Seite nicht vorhanden)&quot;&gt;2001:9E8:B326:F000:3943:7460:6659:8E95&lt;/a&gt; zurückgesetzt&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Selectionsort&amp;#039;&amp;#039;&amp;#039; ({{enS|selection}} ‚Auswahl‘ und {{enS|sort}} ‚sortieren‘) ist ein einfacher („naiver“) [[Sortierverfahren|Sortieralgorithmus]], der [[in-place]] arbeitet und in seiner Grundform [[Stabilität (Sortierverfahren)|instabil]] ist, wobei er sich auch [[Stabilität (Sortierverfahren)|stabil]] implementieren lässt. Die [[Komplexität (Informatik)|Komplexität]] von Selectionsort ist &amp;lt;math&amp;gt; \mathcal{O}(n^2) &amp;lt;/math&amp;gt; ([[Landau-Notation]]). Alternative Bezeichnungen des Algorithmus sind &amp;#039;&amp;#039;&amp;#039;MinSort&amp;#039;&amp;#039;&amp;#039; (von &amp;#039;&amp;#039;Minimum&amp;#039;&amp;#039;) bzw. &amp;#039;&amp;#039;&amp;#039;MaxSort&amp;#039;&amp;#039;&amp;#039; (von &amp;#039;&amp;#039;Maximum&amp;#039;&amp;#039;), &amp;#039;&amp;#039;&amp;#039;Selectsort&amp;#039;&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;&amp;#039;ExchangeSort&amp;#039;&amp;#039;&amp;#039; (AustauschSort).&lt;br /&gt;
&lt;br /&gt;
== Prinzip ==&lt;br /&gt;
Sei S der sortierte Teil des [[Feld (Datentyp)|Arrays]] (vorne im Array) und U der unsortierte Teil (dahinter). Am Anfang ist S noch leer, U&amp;amp;nbsp;entspricht dem ganzen (restlichen) Array. Das Sortieren durch Auswählen läuft nun folgendermaßen ab:&lt;br /&gt;
&lt;br /&gt;
Suche das kleinste Element in U und vertausche es mit dem ersten Element von U (= das erste Element &amp;#039;&amp;#039;nach&amp;#039;&amp;#039;&amp;amp;nbsp;S).&lt;br /&gt;
&lt;br /&gt;
Danach ist das Array bis zu dieser Position sortiert. Das kleinste Element wird in S verschoben (indem S einfach als ein Element länger betrachtet wird, und U nun ein Element später beginnt). S&amp;amp;nbsp;ist um ein Element gewachsen, U&amp;amp;nbsp;um ein Element kürzer geworden. Anschließend wird das Verfahren so lange wiederholt, bis das gesamte Array abgearbeitet worden ist; S&amp;amp;nbsp;umfasst am Ende das gesamte Array, aufsteigend sortiert, U&amp;amp;nbsp;ist leer.&lt;br /&gt;
&lt;br /&gt;
=== Alternativen ===&lt;br /&gt;
Analog kann statt des kleinsten Elements das größte in U gesucht werden, was zu einer absteigenden Sortierreihenfolge führt. Auch kann U nach vorne und S nach hinten gelegt werden, was ebenfalls die Sortierreihenfolge umkehrt.&lt;br /&gt;
&lt;br /&gt;
Zudem existieren auch Ansätze, in denen beide Varianten (MinSort und MaxSort) gemeinsam arbeiten; es gibt einen S-Bereich vorne und einen S-Bereich hinten, U&amp;amp;nbsp;liegt dazwischen. Während eines Durchlaufes werden das größte und das kleinste Element in U gesucht und dieses dann jeweils an den Anfang bzw. an das Ende von U gesetzt. Dadurch erreicht man in der Regel eine Beschleunigung, die jedoch meist nicht den Faktor&amp;amp;nbsp;2 erreicht. Diese Variante wird gelegentlich „Optimized Selection Sort Algorithm“ (OSSA) genannt.&lt;br /&gt;
&lt;br /&gt;
== Formaler Algorithmus ==&lt;br /&gt;
Der [[Algorithmus]] sieht im [[Pseudocode]] so aus:&lt;br /&gt;
&lt;br /&gt;
 prozedur SelectionSort( A : Liste sortierbarer Elemente )&lt;br /&gt;
   hoechsterIndex = Elementanzahl( A ) - 1&lt;br /&gt;
   einfuegeIndex = 0&lt;br /&gt;
   wiederhole&lt;br /&gt;
     minPosition = einfuegeIndex&lt;br /&gt;
     für jeden idx von (einfuegeIndex + 1) bis hoechsterIndex wiederhole&lt;br /&gt;
       falls A[ idx ] &amp;lt; A[ minPosition ] dann&lt;br /&gt;
           minPosition = idx&lt;br /&gt;
       ende falls&lt;br /&gt;
     ende für&lt;br /&gt;
     vertausche A[ minPosition ] und A[ einfuegeIndex ]&lt;br /&gt;
     einfuegeIndex = einfuegeIndex + 1&lt;br /&gt;
   solange einfuegeIndex &amp;lt; hoechsterIndex&lt;br /&gt;
 prozedur ende&lt;br /&gt;
&lt;br /&gt;
Beispiel-Implementierung des [[Algorithmus]] in [[BASIC]]:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;basic&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
Procedure SelectionSort ( Dim(1) A : Double )&lt;br /&gt;
  Integer : Elemente, Ia, Small, Ib, MaxIndex&lt;br /&gt;
  Double : TMP&lt;br /&gt;
 &lt;br /&gt;
  Elemente = Count( A )&lt;br /&gt;
  If Elemente &amp;lt; 2 Then Return&lt;br /&gt;
  MaxIndex = Elemente - 1&lt;br /&gt;
  For Ia = 0 To (MaxIndex - 1)&lt;br /&gt;
    Small = Ia&lt;br /&gt;
    For Ib = (Ia + 1) To MaxIndex&lt;br /&gt;
      If A(Small) &amp;gt; A(Ib) Then Small = Ib&lt;br /&gt;
    Next Ib&lt;br /&gt;
    TMP = A(Ia)&lt;br /&gt;
    A(Ia) = A(Small)&lt;br /&gt;
    A(Small) = TMP&lt;br /&gt;
  Next Ia&lt;br /&gt;
Return&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
[[Datei:Selsort de 0.gif|mini|250px|Der Algorithmus muss jedes Mal den unsortierten Teil des Felds durchlaufen, um das kleinste Element zu finden.]]&lt;br /&gt;
&lt;br /&gt;
Es soll ein [[Feld (Datentyp)|Array]] mit dem Inhalt &amp;lt;math&amp;gt;[4|2|1|6|3|5]&amp;lt;/math&amp;gt; sortiert werden. Rot eingefärbte Felder deuten eine Tauschoperation an, blau eingefärbte Felder liegen im bereits sortierten Teil des Arrays.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|class=&amp;quot;hintergrundfarbe7&amp;quot;| 4 || 2 ||class=&amp;quot;hintergrundfarbe7&amp;quot;| 1 || 6 || 3 || 5&lt;br /&gt;
|}&lt;br /&gt;
| Das Minimum ist 1. Vertausche also das 1. und das 3. Element.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|class=&amp;quot;hintergrundfarbe6&amp;quot;| 1 ||class=&amp;quot;hintergrundfarbe7&amp;quot;| 2 || 4 || 6 || 3 || 5&lt;br /&gt;
|}&lt;br /&gt;
| Das Minimum des rechten Teilarrays ist 2. Da es bereits an 2. Position steht, wird es nicht getauscht.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|class=&amp;quot;hintergrundfarbe6&amp;quot;| 1 ||class=&amp;quot;hintergrundfarbe6&amp;quot;| 2 ||class=&amp;quot;hintergrundfarbe7&amp;quot;| 4 || 6 ||class=&amp;quot;hintergrundfarbe7&amp;quot;| 3 || 5&lt;br /&gt;
|}&lt;br /&gt;
| Wir haben jetzt bereits ein sortiertes Teilarray der Länge 2. Wir vertauschen nun 4 und das Minimum 3.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|class=&amp;quot;hintergrundfarbe6&amp;quot;| 1 ||class=&amp;quot;hintergrundfarbe6&amp;quot;| 2 ||class=&amp;quot;hintergrundfarbe6&amp;quot;| 3 ||class=&amp;quot;hintergrundfarbe7&amp;quot;| 6 ||class=&amp;quot;hintergrundfarbe7&amp;quot;| 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
| Wir vertauschen 6 und 4.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|class=&amp;quot;hintergrundfarbe6&amp;quot;| 1 ||class=&amp;quot;hintergrundfarbe6&amp;quot;| 2 ||class=&amp;quot;hintergrundfarbe6&amp;quot;| 3 ||class=&amp;quot;hintergrundfarbe6&amp;quot;| 4 ||class=&amp;quot;hintergrundfarbe7&amp;quot;| 6 ||class=&amp;quot;hintergrundfarbe7&amp;quot;| 5&lt;br /&gt;
|}&lt;br /&gt;
| Wir vertauschen 6 und 5.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|class=&amp;quot;hintergrundfarbe6&amp;quot;| 1 ||class=&amp;quot;hintergrundfarbe6&amp;quot;| 2 ||class=&amp;quot;hintergrundfarbe6&amp;quot;| 3 ||class=&amp;quot;hintergrundfarbe6&amp;quot;| 4 ||class=&amp;quot;hintergrundfarbe6&amp;quot;| 5 ||class=&amp;quot;hintergrundfarbe6&amp;quot;| 6&lt;br /&gt;
|}&lt;br /&gt;
| Das Array ist jetzt fertig sortiert.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Komplexität ==&lt;br /&gt;
Um ein Array mit &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; Einträgen mittels SelectionSort zu sortieren, muss &amp;lt;math&amp;gt;n-1&amp;lt;/math&amp;gt;-mal das Minimum bestimmt und ebenso oft getauscht werden.&lt;br /&gt;
&lt;br /&gt;
Bei der ersten Bestimmung des Minimums sind &amp;lt;math&amp;gt;n-1&amp;lt;/math&amp;gt; Vergleiche notwendig, bei der zweiten &amp;lt;math&amp;gt;n-2&amp;lt;/math&amp;gt; Vergleiche usw.&lt;br /&gt;
&lt;br /&gt;
Mit der [[Gaußsche Summenformel|gaußschen Summenformel]] erhält man die Anzahl der notwendigen Vergleiche:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;(n-1)+(n-2)+\dotsb+3+2+1 =\frac{(n-1)\cdot n}{2}=\frac{n^2}{2}-\frac{n}{2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da das erste Element &amp;lt;math&amp;gt;n-1&amp;lt;/math&amp;gt; ist, entspricht die exakte Schrittzahl nicht genau der Darstellung der Gaußformel &amp;lt;math&amp;gt;n+(n-1)+\dotsb+2+1 =\tfrac{n\cdot(n+1)}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
SelectionSort liegt somit in der Komplexitätsklasse &amp;lt;math&amp;gt;\mathcal{O}(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Da zum Ermitteln des Minimums immer der komplette noch nicht sortierte Teil des Arrays durchlaufen werden muss, benötigt SelectionSort auch im „besten Fall“ &amp;lt;math&amp;gt;\tfrac{n\cdot(n-1)}{2}&amp;lt;/math&amp;gt; Vergleiche.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
{{Wikibooks|Algorithmensammlung: Sortierverfahren: Selectionsort|Selectionsort|suffix=Implementierungen in der Algorithmensammlung}}&lt;br /&gt;
* https://www.sortieralgorithmen.de/selectsort/index.html&lt;br /&gt;
* [http://www.danmor.ch/blog/?p=221 Erklärung und Code in C++]&lt;br /&gt;
* [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.654.4716&amp;amp;rep=rep1&amp;amp;type=pdf OSSA – Vorstellung und Pseudocode] (PDF)&amp;lt;br /&amp;gt; [http://howtodevelop.eu/question/optimized-selection-sort-algorithm-ossa--how-to-fix-it,27307 OSSA bugfixed]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Sortieralgorithmus]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Horst Gräbner</name></author>
	</entry>
</feed>