{"id":193139,"date":"2026-02-19T12:55:01","date_gmt":"2026-02-19T11:55:01","guid":{"rendered":"https:\/\/liora.io\/de\/?p=193139"},"modified":"2026-02-19T12:55:02","modified_gmt":"2026-02-19T11:55:02","slug":"quicksort-beschreibung-und-bedeutung-dieses-sortieralgorithmus","status":"publish","type":"post","link":"https:\/\/liora.io\/de\/quicksort-beschreibung-und-bedeutung-dieses-sortieralgorithmus","title":{"rendered":"QUICKSORT: Beschreibung und Bedeutung dieses Sortieralgorithmus"},"content":{"rendered":"<p><strong>Quicksort ist einer der besten Sortieralgorithmen, der bei gro\u00dfen Datenstrukturen wie Listen und Tabellen eingesetzt wird. Im Folgenden erf\u00e4hrst du, wie dieser Algorithmus funktioniert, welche verschiedenen Anwendungsf\u00e4lle es gibt und wie leistungsf\u00e4hig er ist.<\/strong><\/p>\t\t\n\t\t<p>Die <strong>Schnellsortierung oder Pivot-Sortierung<\/strong> ist ein Sortieralgorithmus, der 1961 von Tony Hoare erfunden wurde, als er als Gaststudent an der Moskauer Staatsuniversit\u00e4t studierte.<\/p><p>Zu den bekanntesten und am h\u00e4ufigsten verwendeten Sortieralgorithmen der Welt geh\u00f6rt auch die Quicksort. Quicksort ist eine Sortiertechnik, die verwendet wird, um die Elemente einer Datenstruktur in einer bestimmten Reihenfolge (aufsteigend oder absteigend) anzuordnen. Sie wird in der Regel bei Tabellen verwendet, kann aber auch bei Listen eingesetzt werden. Dieser Sortieralgorithmus basiert haupts\u00e4chlich auf dem <strong>DPR-Ansatz (Dividieren und Herrschen)<\/strong>, bei dem zwei oder mehr Arrays mit einer Gr\u00f6\u00dfe, die strikt kleiner als n ist, verwendet werden, um ein Sortierproblem f\u00fcr ein Array der Gr\u00f6\u00dfe n zu l\u00f6sen.<\/p><p>Bei der Schnellsortierung wird von Anfang an ein Element des zu sortierenden Arrays ausgew\u00e4hlt, das als Pivot bezeichnet wird, manchmal zuf\u00e4llig oder auf bestimmte Weise (normalerweise das erste Element oder das letzte Element des Eingabe-Arrays).<\/p><p>Anschlie\u00dfend muss die Eingabetabelle um den Pivot herum partitioniert werden, indem der Pivot an seiner entsprechenden Position in der sortierten Tabelle, d. h. seiner endg\u00fcltigen Position, platziert wird: Dies wird durch eine Partitionierungsfunktion gew\u00e4hrleistet.<\/p><p><strong>Der Partitionierungsalgorithmus<\/strong> ist ein iterativer<a href=\"https:\/\/liora.io\/de\/der-flocking-algorithmus-oder-die-simulation-von-kollektivem-verhalten\"> Algorithmus,<\/a> der die gesamte zu sortierende Tabelle durchl\u00e4uft, um alle Elemente, die kleiner als der Pivot sind, links von diesem zu platzieren und alle Elemente, die gr\u00f6\u00dfer als der Pivot sind, rechts von diesem zu platzieren.<\/p>\t\t\n\t\t\t\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center\"><div class=\"wp-block-button \"><a class=\"wp-block-button__link wp-element-button \" href=\"https:\/\/liora.io\/de\/weiterbildung-data-scientist\">Alles \u00fcber den Quicksort-Algorithmus<\/a><\/div><\/div>\n\n\t\t\t<h2>Alles \u00fcber den Quicksort-Algorithmus<\/h2>\t\t\n\t\t<p>Die <strong>Partitionierungsfunktion<\/strong> durchl\u00e4uft iterativ die zu sortierende Tabelle, um die einzelnen Elemente mit dem Pivot zu vergleichen. Wenn ein Element gefunden wird, das kleiner als der Pivot ist, wird die Position dieses Elements mit dem Wert eines gr\u00f6\u00dferen Elements, das vor ihm in der Liste auftaucht, ge\u00e4ndert. Wenn man auf ein Element st\u00f6\u00dft, das gr\u00f6\u00dfer als die Pivotlinie ist, tut man nichts.<\/p><p>Als <strong>Ergebnis der Partition<\/strong> erh\u00e4lt man den Index des Pivots in der sortierten Tabelle, der somit sein endg\u00fcltiger Index ist, und man tauscht somit die Anfangs- und Endposition des Pivots aus.<\/p><p>Die Wahl des Pivots ist entscheidend, da die Partitionierung der Datenstruktur um den Pivot herum durchgef\u00fchrt wird. Wenn der Pivot die Tabelle nicht in zwei ann\u00e4hernd gleich gro\u00dfe Untertabellen aufteilt, d.h. wenn der Pivot nicht mehr oder weniger dem Median entspricht, sondern einem Grenzwert der zu sortierenden Menge, wird die Partitionierung eine leere Menge der Gr\u00f6\u00dfe und eine Menge der Gr\u00f6\u00dfe n-1 ergeben, wenn die Anfangsgr\u00f6\u00dfe n war.<\/p><p>Im ersten Schritt erfordert diese Aufteilung n Operationen. Im n\u00e4chsten Zug erfordert sie n-1, dann n-2, bis nichts mehr zum Sortieren \u00fcbrig ist, was genau dem Prinzip der Auswahlsortierung entspricht, die eine quadratische Komplexit\u00e4t hat.<\/p><p>Eine allgemein akzeptierte Idee ist es, den Median von drei zuf\u00e4lligen Werten aus der Tabelle als Pivot zu nehmen, um di<strong>e Situation der Wahl des falschen Pivots zu vermeiden.<\/strong><\/p>\t\t\n\t\t\t<h3>Was ist zu tun, nachdem du die Endposition des Pivots nach der Partitionierungsfunktion erhalten hast?<\/h3>\t\t\n\t\t<p>Nachdem du die<strong> Endposition des Pivots<\/strong> erhalten und die Indizes ausgetauscht hast, musst du die Schnellsortierfunktion auf die beiden Untertabellen anwenden, die du auf beiden Seiten des Pivots erhalten hast.<\/p><p>Das hei\u00dft, die linke Untertabelle, die durch Array[Start,Pivot(Index)-1] markiert ist, und die rechte Untertabelle, die durch Array [Pivot(Index)+1,Ende] markiert ist, wobei Pivot(Index) dem Pivot-Index entspricht, den du nach der Partitionierungsfunktion f\u00fcr die Eingangstabelle erhalten hast.<\/p><p>Als N\u00e4chstes m\u00fcssen wir zwei Pivots ausw\u00e4hlen, die den Pivots der linken und rechten Untertabelle entsprechen, und dann einen rekursiven Aufruf der Funktion zum schnellen Sortieren auf diese beiden Untertabellen anwenden. Die rekursiven<strong> Aufrufe der Quicksort-Funktion<\/strong> werden entweder beendet, wenn der Start- und der Endindex eines Unterarrays gleich sind, was bedeutet, dass das Array nur ein Element enth\u00e4lt und somit bereits sortiert ist, oder wenn der Startindex eines Unterarrays gr\u00f6\u00dfer ist als sein Endindex, was bedeutet, dass das Array kein Element enth\u00e4lt (leeres Array) und somit ebenfalls sortiert ist.<\/p>\t\t\n\t\t\t\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center\"><div class=\"wp-block-button \"><a class=\"wp-block-button__link wp-element-button \" href=\"https:\/\/liora.io\/de\/weiterbildung-data-scientist\">Alles \u00fcber den Quicksort-Algorithmus lernen<\/a><\/div><\/div>\n\n\t\t\t<h3>Illustration der Schnellsortierung \/ Quicksort<\/h3>\t\t\n\t\t<p>Betrachte zur Veranschaulichung das folgende Array, bei dem der Pivot als das am weitesten rechts stehende Element gew\u00e4hlt wurde, d. h. array[length(array)-1] = 4:<\/p><pre style=\"padding-left: 40px\">array = [9, 12, 1, 5, 6, 13, 8, 2, 4]<\/pre><figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/2024\/02\/Schema-quicksort-.jpg\" title=\"\" alt=\"\" loading=\"lazy\">\t\t\t\t\t\t\t\t\t\t\t<figcaption><\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t<ul><li style=\"list-style-type: none\"><ul><li>Durch Anwendung der Funktion partition(array, 0, len(array)-1) erh\u00e4lt man: <\/li><\/ul><\/li><\/ul><pre style=\"padding-left: 40px\">Partitioniertes Array: 1 2 4 5 6 13 8 12 9 <\/pre><p style=\"padding-left: 40px\">wobei der Pivot an seine Endposition in der sortierten Tabelle verschoben wurde.<\/p><ul><li style=\"list-style-type: none\"><ul><li style=\"font-weight: 400\">Anschlie\u00dfend wenden wir die Funktion quicksort auf die beiden Arrays an, die wir auf beiden Seiten des Pivots erhalten:<\/li><\/ul><\/li><\/ul><pre style=\"padding-left: 40px\">array1 = [1, 2]<br>array2 = [5, 6, 13, 8, 12, 9].<\/pre><p>Au\u00dferdem musst du f\u00fcr jeden dieser Arrays einen Pivot ausw\u00e4hlen und dann die Partitionen durchf\u00fchren, bis sie sortiert sind.<\/p><p>Nach der Ausf\u00fchrung der Funktion quicksort erh\u00e4lt man die folgende Tabelle:<\/p><pre style=\"padding-left: 40px\">Sorted Array : 1 2 4 5 6 8 9 12 13<\/pre><p>In Bezug auf die Komplexit\u00e4t ist im besten und im mittleren Fall eine fast lineare Komplexit\u00e4t in O(nlogn) zu beobachten. Im schlimmsten Fall hat die Schnellsortierung jedoch eine quadratische Komplexit\u00e4t, d. h. in O(n^2), was unbefriedigend ist. Eine quadratische Komplexit\u00e4t ist in diesem Algorithmus zu beobachten, wenn das Array bereits sortiert oder fast sortiert ist.<\/p>\t\t\n\t\t\t\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center\"><div class=\"wp-block-button \"><a class=\"wp-block-button__link wp-element-button \" href=\"https:\/\/liora.io\/de\/weiterbildung-data-scientist\">Den Quicksort-Algorithmus erlernen<\/a><\/div><\/div>\n\n\t\t\t<h3>Demonstration der Komplexit\u00e4t des schnellen Sortierens \/ Quicksort im mittleren Fall<\/h3>\t\t\n\t\t<p>Ausgehend von der im mittleren Fall erf\u00fcllten Rekursionsgleichung kann man zeigen, dass die Komplexit\u00e4t nahezu linear ist, wie der folgende Beweis zeigt: Um ein Problem der Gr\u00f6\u00dfe n zu l\u00f6sen, l\u00f6st man zwei Probleme der Gr\u00f6\u00dfe n\/2 mit einer linearen Rekonstruktion <strong>aufgrund der Partitionierungsfunktion, die linear zur Gr\u00f6\u00dfe der Datenstruktur ist.<\/strong><\/p>  T    (   n   )    =   2   T    (     n     2     )    +   O    (   n   )   \n<p>wobei O(n) die Komplexit\u00e4t der Partitionsfunktion darstellt<\/p>Es folgt also durch Iteration, dass   T    (   n   )    =     2     k     T    (     n       2     k       )    +   k   O    (   n   )   <p>Wenn du n = 2 k setzt, erh\u00e4ltst du k = log 2 n<\/p>Daher   T    (   n   )    =   n   T    (   1   )    +     log     2     n   O    (   n   )   <p>Nun stellt T(1) die Komplexit\u00e4t des schnellen Sortierens dar, wenn das Array nur ein einziges Element enth\u00e4lt und somit sortiert ist.<\/p>Da diese Komplexit\u00e4t konstant ist, ergibt sich also Folgendes:   T    (   n   )    =   O    (   n     log     2     n   )   \t\t\n\t\t\t<h2>Warum ist das schnelle Sortieren \/ Quicksort so wichtig?<\/h2>\t\t\n\t\t<p>Die schnelle Sortierung \/ <strong>Quicksort<\/strong> ist aus Gr\u00fcnden der Datenlokalit\u00e4t im Durchschnitt effizienter als eine andere. Das liegt daran, dass jeder Aufruf mit Daten arbeitet, die im Speicher sehr nahe beieinander liegen. Aufgrund der Caches, die erhebliche Optimierungen erm\u00f6glichen, wenn die Daten eine hohe Lokalit\u00e4t haben, weist der Algorithmus eine bessere Leistung auf.<\/p><p>Was die r\u00e4umliche Komplexit\u00e4t angeht, so hat die Schnellsortierung im schlimmsten Fall eine quadratische Komplexit\u00e4t und im mittleren Fall eine logarithmische Komplexit\u00e4t. Die Schnellsortierung ist effizient bei gro\u00dfen Datenstrukturen und hat eine geringe r\u00e4umliche Komplexit\u00e4t. Daf\u00fcr ist sie bei kleinen Strukturen weniger effizient als z. B. die Einf\u00fcgesortierung.<\/p><p>Zusammenfassend l\u00e4sst sich sagen, dass <strong>Quicksort<\/strong> ein h\u00e4ufig verwendeter Sortieralgorithmus ist, insbesondere bei gro\u00dfen Datenstrukturen, der im mittleren Fall eine gute zeitliche Komplexit\u00e4t aufweist. Die Wahl des Pivots bei der Verwendung dieses Algorithmus bleibt jedoch ein entscheidender Faktor, was folglich eine angemessene Wahl des Pivots erfordert.<\/p>\t\t\n\t\t\t\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center\"><div class=\"wp-block-button \"><a class=\"wp-block-button__link wp-element-button \" href=\"https:\/\/liora.io\/de\/weiterbildung-data-scientist\">Den Quicksort-Algorithmus beherrschen<\/a><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Quicksort ist einer der besten Sortieralgorithmen, der bei gro\u00dfen Datenstrukturen wie Listen und Tabellen eingesetzt wird. Im Folgenden erf\u00e4hrst du, wie dieser Algorithmus funktioniert, welche verschiedenen Anwendungsf\u00e4lle es gibt und wie leistungsf\u00e4hig er ist. Die Schnellsortierung oder Pivot-Sortierung ist ein Sortieralgorithmus, der 1961 von Tony Hoare erfunden wurde, als er als Gaststudent an der Moskauer [&hellip;]<\/p>\n","protected":false},"author":76,"featured_media":218563,"comment_status":"open","ping_status":"open","sticky":false,"template":"elementor_theme","format":"standard","meta":{"_acf_changed":false,"editor_notices":[],"footnotes":""},"categories":[2476],"class_list":["post-193139","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cloud-dev"],"acf":[],"_links":{"self":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/193139","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/users\/76"}],"replies":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/comments?post=193139"}],"version-history":[{"count":2,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/193139\/revisions"}],"predecessor-version":[{"id":218564,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/193139\/revisions\/218564"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/media\/218563"}],"wp:attachment":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/media?parent=193139"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/categories?post=193139"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}