<?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=Timsort</id>
	<title>Timsort - 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=Timsort"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Timsort&amp;action=history"/>
	<updated>2026-05-30T16:53:02Z</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=Timsort&amp;diff=2317585&amp;oldid=prev</id>
		<title>~2026-82428-7 am 6. Februar 2026 um 16:12 Uhr</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Timsort&amp;diff=2317585&amp;oldid=prev"/>
		<updated>2026-02-06T16:12:25Z</updated>

		<summary type="html">&lt;p&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;Timsort&amp;#039;&amp;#039;&amp;#039; ist ein hybrider [[Sortieralgorithmus]], der von [[Mergesort]] und [[Insertionsort]] abgeleitet ist. Er wurde entwickelt, um auf verschiedenen realen Daten schnell zu arbeiten. Er wurde 2002 von Tim Peters für die Nutzung in [[Python (Programmiersprache)|Python]] entwickelt und war ab der Version 2.3 dort der Standard-Sortieralgorithmus, bis er in Version 3.11 durch [[Powersort]] ersetzt wurde.&amp;lt;ref&amp;gt;{{Internetquelle |autor=Sebastian Wild |url=https://www.wild-inter.net/posts/powersort-in-python-3.11 |titel=Powersort in official Python 3.11 release |werk=wild-inter.net |datum=2022-10-24 |sprache=en |abruf=2026-02-04}}&amp;lt;/ref&amp;gt; Mittlerweile wird er auch in [[Java SE]] 7 und auf der [[Android (Betriebssystem)|Android-Plattform]] genutzt.&amp;lt;ref&amp;gt;{{Internetquelle |autor=jjb |url=http://hg.openjdk.java.net/jdk7/tl/jdk/rev/bfd7abda8f79 |titel=Commit 6804124: Replace &amp;quot;modified mergesort&amp;quot; in java.util.Arrays.sort with timsort |werk=Java Development Kit 7 Hg repo |sprache=en |abruf=2011-02-24 |offline=ja |archiv-bot=2024-05-29 23:10:47 InternetArchiveBot |archiv-url=https://web.archive.org/web/20120228192950/http://hg.openjdk.java.net/jdk7/tl/jdk/rev/bfd7abda8f79 |archiv-datum=2012-02-28 }}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{Internetquelle |url=http://www.kiwidoc.com/java/l/x/android/android/5/p/java.util/c/TimSort |titel=Class: java.util.TimSort&amp;amp;#60;T&amp;amp;#62; |werk=Android JDK 1.5 Documentation |sprache=en |abruf=2011-02-24}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Funktionsweise ==&lt;br /&gt;
Tim Peters beschreibt den Algorithmus folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
{{Zitat|[…] ein anpassungsfähiges, stabiles Natural Mergesort, das bescheidenerweise Timsort heißt (hey, ich hab&amp;#039;s verdient &amp;amp;lt;zwinker&amp;amp;gt;). Es ist leistungsfähiger als Natural Mergesort beim Sortieren von vielen Arten von teilweise sortierten [[Array (Datentyp)|Arrays]] (weniger als lg(N!) Vergleiche erforderlich, sogar bis hinunter zu N-1), dennoch so schnell wie das von Python vorher eingesetzte, stark optimierte hybride [[Samplesort]] beim Sortieren zufälliger Arrays.&lt;br /&gt;
&lt;br /&gt;
Kurz gefasst, geht die Hauptroutine einmal von links nach rechts durch das Array, dabei identifiziert sie abwechselnd die nächste vorsortierte Teilfolge oder fügt diese „intelligent“ mit den vorher erkannten vorsortierten Teilfolgen zusammen. Der Rest dient der Beschleunigung und der hart-erkämpften Verbesserung der [[Effizienz (Informatik)|Speichereffizienz]].&lt;br /&gt;
 |Autor=Tim Peters&lt;br /&gt;
 |ref=&amp;lt;ref name=&amp;quot;timsort.txt&amp;quot;&amp;gt;{{Internetquelle |autor=Tim Peters |url=https://bugs.python.org/file4451/timsort.txt |titel=timsort |werk=Python Issue Tracker |sprache=en |abruf=2011-02-24}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Timsort findet bereits sortierte Abschnitte in den Daten. Absteigend sortierte Abschnitte werden umgedreht. Dann wird geprüft, ob die Länge dieser Abschnitte die minimale Abschnittslänge für die jeweilige Array-Größe erreicht. Die minimale Abschnittslänge hängt von der Größe des Arrays ab. Für Arrays mit weniger als 64 Elementen ist die minimale Abschnittslänge das gesamte Array, sodass Timsort in dem Fall einem Insertionsort entspricht. Für größere Arrays wird als minimale Abschnittslänge eine Zahl zwischen 32 und 64 gewählt, sodass die Größe des Arrays geteilt durch die minimale Abschnittslänge gleich einer oder minimal kleiner als eine [[Zweierpotenz]] ist. Der Algorithmus nutzt einfach die sechs höchsten [[Bit]]s der Array-Länge und addiert eins dazu, falls noch zumindest eines der weiteren Bits gesetzt ist. Wenn ein Abschnitt nicht die minimale Abschnittslänge erreicht, wird er mit Insertionsort vergrößert, bis er lang genug ist. Die Abschnitte werden dann mittels Mergesort zum fertig sortierten Array zusammengefügt.&amp;lt;ref name=&amp;quot;timsort.txt&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Komplexität und Effizienz ==&lt;br /&gt;
&lt;br /&gt;
Wie Mergesort ist Timsort ein [[Stabilität (Sortierverfahren)|stabiles]], [[vergleichsbasiertes Sortierverfahren]] mit einer Best-Case-[[Zeitkomplexität|Komplexität]] von [[Landau-Symbole|O]](&amp;#039;&amp;#039;n&amp;#039;&amp;#039;) und einer Worst- und Average-Case-Komplexität von O(&amp;#039;&amp;#039;n&amp;#039;&amp;#039; log&amp;amp;nbsp;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;).&amp;lt;ref&amp;gt;{{Internetquelle |autor=Tim Peters |titel=&amp;amp;#91;Python-Dev&amp;amp;#93; Sorting |url=https://mail.python.org/pipermail/python-dev/2002-July/026837.html |werk=Python Developers Mailinglist |datum=2002-07-20 |sprache=en |abruf=2011-02-24 |zitat=[Timsort] also has good aspects:&lt;br /&gt;
It&amp;#039;s stable (items that compare equal retain their relative order, so,&lt;br /&gt;
e.g., if you sort first on zip code, and a second time on name, people&lt;br /&gt;
with the same name still appear in order of increasing zip code; this&lt;br /&gt;
is important in apps that, e.g., refine the results of queries based&lt;br /&gt;
on user input).&lt;br /&gt;
...&lt;br /&gt;
It has no bad cases (O(N log N) is worst case; N-1 compares is best).}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach der [[Informationstheorie]] kann kein vergleichsbasiertes Sortierverfahren mit weniger als Ω(&amp;#039;&amp;#039;n&amp;#039;&amp;#039; log&amp;amp;nbsp;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;) Vergleichen im Average-Case auskommen. Auf realen Daten braucht Timsort oft deutlich weniger als Ω(&amp;#039;&amp;#039;n&amp;#039;&amp;#039; log&amp;amp;nbsp;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;) Vergleiche, weil es davon profitiert, dass Teile der Daten schon sortiert sind.&amp;lt;ref&amp;gt;{{Literatur |Autor=Alex Martelli |Titel=Python in a Nutshell |Verlag=O’Reilly |Datum=2006 |Seiten=57 |ISBN=0596100469}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bekannte Fehler ==&lt;br /&gt;
Im Februar 2015 stellte der Amsterdamer Informatiker Stijn de Gouw unter der Verwendung von Methoden zur [[Formale Verifikation|formalen Verifikation]] fest, dass alle Implementierungen des Timsort-Algorithmus einen Fehler enthalten.&amp;lt;ref name=&amp;quot;:0&amp;quot;&amp;gt;http://envisage-project.eu/proving-android-java-and-python-sorting-algorithm-is-broken-and-how-to-fix-it/&amp;lt;/ref&amp;gt; Dieser Fehler hat in der Python-Implementierung keine praktischen Auswirkungen, da er nur auf Rechnern mit sehr viel Speicher auftreten kann, die zurzeit nicht existieren. Dennoch wurde der Fehler behoben, sodass die Korrektheit der Implementierung nachgewiesen werden konnte.&amp;lt;ref&amp;gt;http://bugs.python.org/issue23515&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt; Für Java dagegen war die Konstruktion einer Eingabe möglich, die das Programm zum Absturz bringt. Auch hier wurde der Fehler kurz nach Bekanntwerden korrigiert.&amp;lt;ref&amp;gt;https://bugs.openjdk.java.net/browse/JDK-8072909&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [https://corte.si/posts/code/timsort/index.html Visualising Timsort] – Beschreibung mit bildlicher Darstellung&lt;br /&gt;
* [https://svn.python.org/projects/python/trunk/Objects/listobject.c Python&amp;#039;s listobject.c] – die Implementation von Timsort in [[C (Programmiersprache)|C]] für [[CPython]]&lt;br /&gt;
* {{GitHub|openjdk/jdk/blob/master/src/java.base/share/classes/java/util/TimSort.java|OpenJDK&amp;#039;s TimSort.java}} – die Java-Implementation von Timsort&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Sortieralgorithmus]]&lt;/div&gt;</summary>
		<author><name>~2026-82428-7</name></author>
	</entry>
</feed>