<?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=Treesort</id>
	<title>Treesort - 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=Treesort"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Treesort&amp;action=history"/>
	<updated>2026-05-27T03:10:20Z</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=Treesort&amp;diff=2758922&amp;oldid=prev</id>
		<title>imported&gt;ⵓ: +https ⇄</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Treesort&amp;diff=2758922&amp;oldid=prev"/>
		<updated>2025-12-04T17:12:47Z</updated>

		<summary type="html">&lt;p&gt;+https &lt;a href=&quot;/index.php?title=Benutzer:%E2%B5%93/ARreplace&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Benutzer:ⵓ/ARreplace (Seite nicht vorhanden)&quot;&gt;⇄&lt;/a&gt;&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;Treesort&amp;#039;&amp;#039;&amp;#039; ist ein [[Sortieralgorithmus]], der 1962 vom Informatiker [[Robert Floyd]] vorgestellt wurde und einer der Vorgänger des Algorithmus [[Heapsort]] ist.&amp;lt;ref&amp;gt;[https://xlinux.nist.gov/dads/HTML/treesort2.html &amp;#039;&amp;#039;U.S. National Institute of Standards and Technology – treesort/2&amp;#039;&amp;#039;] xlinux.nist.gov – abgerufen am 12. März 2013&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{Literatur |Autor=&amp;#039;&amp;#039;[[Robert Floyd|Robert W. Floyd]]&amp;#039;&amp;#039; |Titel=Algorithm 113: Treesort |Sammelwerk=Communications of the ACM |Band=5 |Nummer=8 |Datum=1962-08 |Seiten=434 |Online=[https://s2.smu.edu/~barr/barrlib/pertcpm/ACMp436-wegstein.pdf Online] |Format=PDF |KBytes=725}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Prinzip ==&lt;br /&gt;
Treesort erhält ein Eingabe-[[Feld (Datentyp)|Array]] von Elementen und gibt sie in einem Ausgabe-Array in aufsteigender Reihenfolge gemäß ihrer [[Ordnungsrelation#Totalordnung|totalen Ordnungsrelation]] („≤“) aus. Dafür wird ein Zwischenspeicher der doppelten Größe der Eingabe erstellt, wovon die zweite Hälfte zunächst mit der unsortierten Eingabe befüllt wird. Fasst man das ganze Array als [[Binärbaum]] auf, so stellt die hintere Hälfte die Einträge für die [[Blätter und innere Knoten in der Graphentheorie|Blattknoten]] dar. Die vordere Hälfte sind die Elternknoten, in die nun in mehreren Durchläufen jeweils der kleinere Wert der beiden Kindsknoten eingetragen wird. Zusätzlich zum Sortierschlüssel wird auch die Position innerhalb der Blattknoten gespeichert. Am Ende eines Durchlaufs wird an der im Wurzelknoten gespeicherten Position der passende Blattknoten durch den Wert &amp;#039;&amp;#039;unendlich&amp;#039;&amp;#039; ersetzt. Somit steht nach jedem Durchlauf im Wurzelknoten der niedrigste Wert der Einträge im Binärbaum, der dann ins Ausgabe-Array kopiert wird.&lt;br /&gt;
&lt;br /&gt;
Der Algorithmus verfügt über eine optimale Laufzeit von &amp;lt;math&amp;gt; {O}(n \log n) &amp;lt;/math&amp;gt; unter Verwendung von &amp;lt;math&amp;gt;{O}(n)&amp;lt;/math&amp;gt; zusätzlichem Speicher.&lt;br /&gt;
&lt;br /&gt;
== Pseudocode ==&lt;br /&gt;
Der folgende Code beschreibt den Algorithmus nach Floyd, der die kleinsten &amp;#039;&amp;#039;k&amp;#039;&amp;#039; Elemente des &amp;#039;&amp;#039;n&amp;#039;&amp;#039;-elementigen Arrays &amp;#039;&amp;#039;Unsortiert&amp;#039;&amp;#039; in das &amp;#039;&amp;#039;k&amp;#039;&amp;#039;-elementige Array &amp;#039;&amp;#039;Sortiert&amp;#039;&amp;#039; schreibt. In den Zwischenspeicher &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; wird zu Beginn mit der Funktion &amp;lt;code&amp;gt;packe (wert, position)&amp;lt;/code&amp;gt; ein Wert zusammen mit seiner Position geschrieben. Mithilfe der Funktionen &amp;lt;code&amp;gt;linkeHälfte&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;rechteHälfte&amp;lt;/code&amp;gt; werden die beiden Werte wieder ausgelesen. Die Funktion &amp;lt;code&amp;gt;minimum (x,y)&amp;lt;/code&amp;gt; liefert das Minimum der beiden Zahlen &amp;#039;&amp;#039;x&amp;#039;&amp;#039; und &amp;#039;&amp;#039;y&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
  &amp;#039;&amp;#039;&amp;#039;Prozedur&amp;#039;&amp;#039;&amp;#039; Treesort(Unsortiert, n, Sortiert, k)&lt;br /&gt;
    m := &amp;#039;&amp;#039;&amp;#039;Array mit Index&amp;#039;&amp;#039;&amp;#039; 1 &amp;#039;&amp;#039;&amp;#039;bis&amp;#039;&amp;#039;&amp;#039; 2n - 1&lt;br /&gt;
    &amp;#039;&amp;#039;&amp;#039;für&amp;#039;&amp;#039;&amp;#039; i:= 1 &amp;#039;&amp;#039;&amp;#039;bis&amp;#039;&amp;#039;&amp;#039; n&lt;br /&gt;
      m[n+i-1] := packe(Unsortiert[i-1], n+i-1)&lt;br /&gt;
    &amp;#039;&amp;#039;&amp;#039;für&amp;#039;&amp;#039;&amp;#039; i:=n-1 &amp;#039;&amp;#039;&amp;#039;bis&amp;#039;&amp;#039;&amp;#039; 1&lt;br /&gt;
      m[i] := minimum(m[2i], m[2i+1])&lt;br /&gt;
    &amp;#039;&amp;#039;&amp;#039;für&amp;#039;&amp;#039;&amp;#039; j:=1 &amp;#039;&amp;#039;&amp;#039;bis&amp;#039;&amp;#039;&amp;#039; k&lt;br /&gt;
      Sortiert[j] := linkeHälfte(m[1])&lt;br /&gt;
      i := rechteHälfte(m[1])&lt;br /&gt;
      m[i] := &amp;lt;math&amp;gt;\infty&amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;#039;&amp;#039;&amp;#039;für&amp;#039;&amp;#039;&amp;#039; i := &amp;lt;math&amp;gt;\lfloor i \div 2\rfloor&amp;lt;/math&amp;gt; &amp;#039;&amp;#039;&amp;#039;solange&amp;#039;&amp;#039;&amp;#039; i &amp;gt; 0&lt;br /&gt;
        m[i] := minimum(m[2i], m[2i+1])&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
Das Eingabe-Array (7, 5, 13, 11, 2, 3) wird von Treesort zunächst in den Zwischenspeicher mitsamt Position gespeichert. Damit hat das Array &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; elf Elemente und an den Positionen 6 bis 11 stehen die folgenden Einträge:&lt;br /&gt;
* in m[6] steht (7,6)&lt;br /&gt;
* in m[7] steht (5,7)&lt;br /&gt;
* in m[8] steht (13,8)&lt;br /&gt;
* in m[9] steht (11,9)&lt;br /&gt;
* in m[10] steht (2,10)&lt;br /&gt;
* in m[11] steht (3,11)&lt;br /&gt;
Dieser Zustand ist im ersten Bild als Binärbaum dargestellt. Anschließend werden die inneren Knoten von den Blättern zur Wurzel gefüllt und dabei das kleinste Element im Baum ermittelt, also (2,10). Somit wird 2 als erstes Element in das Ausgabe-Array eingetragen und m[10] wird auf &amp;lt;math&amp;gt;\infty&amp;lt;/math&amp;gt; gesetzt (zweites Bild). Für k=6 wird in fünf weiteren Schleifendurchläufen nun jeweils das verbleibende kleinste Element ermittelt und ins Ausgabe-Array übertragen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;410&amp;quot; heights=&amp;quot;320&amp;quot;&amp;gt;&lt;br /&gt;
 FloydTreesort initial.svg|Initialisierung&lt;br /&gt;
 FloydTreesort01.svg|Ermitteln des kleinsten Elements&lt;br /&gt;
 FloydTreesort02.svg|Schleife: Ermitteln der übrigen kleinsten Elemente&lt;br /&gt;
 FloydTreesort end.svg|Letzter Schritt&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Sortieralgorithmus]]&lt;/div&gt;</summary>
		<author><name>imported&gt;ⵓ</name></author>
	</entry>
</feed>