Mergesort

Schon die Römer verwendeten das sogenannte "Teile und herrsche"-Prinzip – allerdings wurde es bei ihnen noch "Divide et impera!" genannt. Dahinter verstecken sich verschiedene Theorien. Eine davon erklärt das Teile-und-Herrsche-Prinzip als eine ursprüngliche Kriegsstrategie, die verwendet wurde, um größere Feinde oder Königreiche zu zerspalten und mit einer Eroberung wieder zu vereinen. 

Los geht’s

Schreib bessere Noten mit StudySmarter Premium

PREMIUM
Karteikarten Spaced Repetition Lernsets AI-Tools Probeklausuren Lernplan Erklärungen Karteikarten Spaced Repetition Lernsets AI-Tools Probeklausuren Lernplan Erklärungen
Kostenlos testen

Geld-zurück-Garantie, wenn du durch die Prüfung fällst

Review generated flashcards

Leg kostenfrei los
Du hast dein AI Limit auf der Website erreicht

Erstelle unlimitiert Karteikarten auf StudySmarter

StudySmarter Redaktionsteam

Team Mergesort Lehrer

  • 10 Minuten Lesezeit
  • Geprüft vom StudySmarter Redaktionsteam
Erklärung speichern Erklärung speichern
Inhaltsverzeichnis
Inhaltsverzeichnis

Springe zu einem wichtigen Kapitel

    Nach genau diesem Prinzip funktioniert der Mergesort Sortieralgorithmus – nur natürlich ohne die Streitereien und den Krieg! Was genau dahintersteckt und wie der Algorithmus funktioniert, erfährst Du jetzt.

    Mergesort Erklärung

    Das Mergesort Sortierverfahren basiert auf dem sogenannten Divide and Conquer paradigm – also dem Teile-und-Herrsche-Prinzip. Was heißt das? Das Grundprinzip hinter dem Algorithmus ist es, eine Datenmenge immer wieder in zwei nahezu gleich große Teilmengen zu unterteilen. Das machst Du so lange, bis die Teilmengen nur noch jeweils ein Element enthalten. Dann wird das Ganze quasi in umgekehrter Richtung wieder zusammengeführt und dabei sortiert.

    Falls Du Dir bei der Schreibweise des Sortierverfahren nicht ganz sicher sein solltest: Mergesort und Merge Sort sind beide korrekt.

    Mergesort Definition

    Mergesort ist ein effizienter, stabiler Sortieralgorithmus, der eine Datenmenge in Teilmengen einteilt und diese dann rückwärts wieder zusammenführt. Der Algorithmus wurde erstmals 1945 von John von Neumann eingeführt.

    Mergesort stammt aus dem Englischen von "merge", was so viel heißt wie verschmelzen und "sort", also sortieren.

    Mergesort Algorithmus

    Wie der Merge Sort Algorithmus funktioniert, lässt sich am besten an einem Beispiel erklären. Gegeben ist ein Array [5, 2, 8, 4, 9, 7, 1, 3, 6], das sortiert werden soll.

    Schritt 1

    Teile das gegebene Array zunächst so lange, bis die einzelnen Arrays eine Länge von 1 haben. Da es sich bei diesem Beispiel um eine ungerade Anzahl an Elementen handelt, sind die Teilbereiche logischerweise nicht alle gleich groß. Das sorgt dafür, dass lediglich die Werte 3 und 6 in einem vierten Schritt erneut unterteilt werden müssen. Im nächsten Schritt beginnst Du dann bei diesen beiden Elementen.

    Die Reihenfolge der Elemente verändert sich beim Aufteilen der Arrays noch nicht!

    5 2 8 4 9 7 1 3 6
    5 2 8 49 7 1 3 6
    5 28 49 71 3 6
    5 2849713 6
    3 6

    Schritt 2

    Beginne nun damit, die einzelnen Arrays rückwärts wieder zusammenzuführen. In diesem Fall wird mit der 3 und der 6 begonnen.

    36
    52849713 6

    Schritt 3

    In der nächsten Zeile beginnst Du dann wieder von links damit, jeweils die zwei nebeneinander liegenden Arrays zusammenzuführen. Vergleiche dabei die Elemente miteinander, haben sie nicht die richtige Reihenfolge, sortierst Du sie zusätzlich – in diesem Beispiel wird aufsteigend sortiert.

    52849713 6
    2 54 87 91 3 6

    Schritt 4

    Führe nun wieder jeweils die benachbarten Arrays zu einem zusammen und sortiere dabei die Elemente, falls nötig.

    2 54 87 91 3 6
    2 4 5 81 3 6 7 9

    Schritt 5

    Im letzten Schritt müssen jetzt nur noch die beiden verbliebenen Arrays zusammengeführt und sortiert werden.

    2 4 5 81 3 6 7 9
    1 2 3 4 5 6 7 8 9

    Tada – fertig ist Dein mit Merge Sort sortiertes Array!

    Mergesort Vorgehensweise

    Noch einmal kurz und knapp: Wie gehst Du beim Merge Sort Algorithmus vor?

    • Teile die Datenmenge in zwei möglichst gleich große Hälften
    • Wiederhole diesen Schritt, bis die Teilbereiche nur noch ein Element enthalten
    • Führe nun die einzelnen Teilbereiche schrittweise wieder zusammen ("mergen") und sortiere sie dabei

    Mergesort Komplexität

    Wie sieht es mit der Komplexität beim Mergesort Verfahren aus? Unterschieden werden kann die Zeitkomplexität (Laufzeit) und die Platzkomplexität.

    Mehr zur Komplexität und zur O-Notation findest Du in den Erklärungen zu den Sortierverfahren und zur O-Notation auf StudySmarter.

    Mergesort Laufzeit

    Die Laufzeit beträgt beim Mergesort in allen drei Anwendungsfällen (Best-Case, Average-Case, Worst-Case) O(n log n). Dabei macht es für die Laufzeit theoretisch keinen großen Unterschied, ob die Elemente bereits vorsortiert oder zufällig angeordnet sind.

    Falls Du doch einen nicht unerheblichen Unterschied bei den Laufzeiten feststellen solltest, kann das an der Sprungvorhersage ("branch prediction") liegen. Einen kurzen Exkurs dazu findest Du in der Erklärung zum Bubble Sort auf StudySmarter.

    Warum beträgt die Laufzeit beim Merge Sort O(n log n)?

    Beim Unterteilen des Arrays wird bei einer Verdopplung der Eingabemenge nur ein Unterteilungsschritt mehr benötigt. Das heißt, die Anzahl von Teilungen beträgt log2 n.

    Das Zusammenführen der unterteilten Arrays hat einen linearen Aufwand, also O(n). Das liegt daran, dass der Merge Sort Algorithmus keine verschachtelten Schleifen oder dergleichen enthält. Bei einer Verdopplung der Eingabegröße würde sich also auch der Aufwand verdoppeln.

    Packt man nun beide Komplexitäten zusammen, erhält man n mal log2 n Schritte an Zerteilungen und Merge-Schritten. Die Laufzeit beträgt demnach: O(n log n).

    Mergesort Platzkomplexität

    Die Platzkomplexität beim Mergesort hat einen linearen Bedarf – sprich O(n). Das liegt daran, dass sich auch hier der zusätzlich benötige Speicherplatz verdoppelt, wenn die Eingabegröße verdoppelt wird. Der Algorithmus arbeitet in der Regel nicht in-place, da zusätzlicher Speicher benötigt wird.

    Du kannst Merge Sort auch in-place, also ohne zusätzlichen Speicheraufwand implementieren. Allerdings verschlechtert sich dadurch die Laufzeit meist erheblich – Average-Case und Worst-Case liegen bei O(n2), anstatt bei O(n). Die Gesamtkomplexität würde O(n2 log n) statt O(n log n) betragen und der Algorithmus wäre nicht mehr wirklich effizient.

    Mergesort – Weitere Begrifflichkeiten

    Im Folgenden werden noch ein paar weitere Begriffe rund um den Merge Sort Algorithmus geklärt. Dazu gehören:

    • Stabilität
    • Vergleichsbasiert
    • Iterativ vs. rekursiv
    • Parallelisierbarkeit

    Mergesort Stabilität

    Merge Sort ist ein stabiler Sortieralgorithmus. Der Punkt, an dem die ursprüngliche Reihenfolge verändert werden könnte, ist, wenn zwei Teilbereiche wieder zusammengeführt werden. Dabei wird geschaut, ob der größte Wert aus dem linken Teilbereich größer, kleiner oder gleich dem kleinsten Wert aus dem rechten Teilbereich ist. Wenn die Werte gleich sind, wird der linke zuerst kopiert – die Reihenfolge gleicher Elemente bleibt also immer erhalten.

    Mergesort vergleichsbasiert

    Merge Sort arbeitet vergleichsbasiert, da beim Zusammenführen der einzelnen Elemente immer zwei miteinander verglichen und sortiert werden.

    Mergesort iterativ – rekursiv

    Der Merge Sort Algorithmus wird meist rekursiv implementiert. Du kannst den Algorithmus aber auch iterativ verwenden.

    An dieser Stelle solltest Du noch wissen, dass die rekursive Implementation Datenmengen schneller durchläuft als die iterative Variante.

    Mergesort Parallelisierbarkeit

    Ist Mergesort parallelisierbar? Die Antwort lautet: ja. Dafür gibt es zwei mögliche Ansätze: Entweder Du parallelisierst die Hauptmethode des Mergesort (merge()) oder Du parallelisierst die rekursiven Aufrufe des Mergesort.

    Letztere Möglichkeit hat jedoch den Nachteil, dass die Leistungsfähigkeit von mehrkernigen CPUs nicht vollständig genutzt wird.

    Mergesort Zusammenfassung

    Alles, was Du bisher über Merge Sort gelernt haben solltest, findest Du in der nachfolgenden Übersicht:

    Best-CaseAverage-CaseWorst-CasePlatz-komplexitätStabiles Verfahrenvergleichs-basiertIn-PlaceParallelisier-barkeititerativ/rekursiv
    O(n log n)O(n log n)O(n log n)O(n)JaJaNeinMöglichBeides

    Mergesort Vor- und Nachteile

    Die Vor- und Nachteile des Mergesort findest Du in der folgenden Tabelle zusammengefasst:

    VorteileNachteile
    Effiziente Laufzeit mit O(n log n) Es wird ein zusätzlicher Zwischenspeicher in der Größe der eigentlichen Datenmenge benötigt
    Kann Datenmengen sequenziell durcharbeiten, weswegen auch verkettete Listen sortiert werden könnenBei vorsortierten Datenmengen eher ineffizient
    Stabiler SortieralgorithmusKomplizierter zu implementieren als z. B. Insertion Sort
    Gut geeignet für sehr große, extern gespeicherte Datenmengen

    Für die Nachteile des Mergesort gibt es verschiedene Weiterentwicklungen. Eine ist der sogenannte "Natural Mergesort". Der Algorithmus soll verhindern, dass Datenmengen – unnötigerweise – unterteilt werden. Das Problem hast Du z. B. bei bereits relativ gut vorsortierten Datenmengen. Der Natural Mergesort Algorithmus identifiziert diese vorsortierten Bereiche und verhindert so unnötiges Teilen.

    Bei absteigend und aufsteigend vorsortierten Datenmengen hätte Natural Mergesort dementsprechend jeweils eine Laufzeit von O(n).

    Eine Weiterentwicklung des Natural Mergesort ist der Timsort Algorithmus. Dabei werden Teile der Datenmenge mit Insertion Sort sortiert.

    Mergesort vs. Quicksort

    Eine häufig gestellte Frage ist, welcher Sortieralgorithmus ist schneller: Mergesort oder Quicksort? Das lässt sich relativ schnell beantworten: Quicksort ist der schnellere Algorithmus. Das liegt, kurz gesagt, daran, dass der Quicksort nur die Elemente verschiebt, die sich an der falschen Position befinden. Beim Merge Sort werden hingegen jedes Mal alle Elemente kopiert.

    Du willst noch mehr zum Quicksort erfahren? Dann schau doch auf der gleichnamigen Erklärung bei StudySmarter vorbei.

    Mehr Vor- und Nachteile von Mergesort und Quicksort findest Du in der nachfolgenden Tabelle:

    MergesortQuicksort
    VorteileZeitkomplexität ist im Worst-Case nie schlechter als O(n log n)Für unsortierte Datenmengen etwa doppelt so schnell, für vorsortierte Datenmengen 4-mal so schnell
    Stabiler Sortieralgorithmus
    NachteileLangsamere Laufzeit als QuicksortZeitkomplexität ist im Worst-Case O(n2)
    Zusätzlicher Speicher mit O(n) notwendigInstabiler Sortieralgorithmus

    Trotz des besseren Worst-Cases wird in der Praxis eher Quicksort als Mergesort verwendet!

    Mergesort Beispiel

    Für ein besseres Verständnis folgen nun noch ein paar weitere (Code-)Beispiele zum Mergesort.

    Mergesort Anwendung

    Die Anwendung von Mergesort erfolgt z. B. in folgenden Fällen:

    • bei verketteten Listen
    • wenn auf einem externen Speicher sortiert werden soll

    Mergesort Pseudocode

    Eine Möglichkeit zur Implementation von Mergesort wird Dir mit dem folgenden Pseudocode vorgestellt:

    mergesort (Array array)
    
    // Das Array wird beim Unterteilen in jeweils zwei gleich große Hälften (links und rechts) unterteilt
    // Ist das Array <= 1 wird dieser Schritt beendet 
    
    if array <= 1
    do
        int mitte = array.length / 2
        int links -> i <= mitte - 1
        int rechts -> i >= array.length - mitte - 1
        links = mergesort(links)
        rechts = mergesort(rechts)
        return zusammenfuehren(links, rechts)
    
    // Funktion zum Zusammenführen der Teilbereiche zu einem neuen Array
    
    zusammenfuehren(links, rechts)
        int n
        int indexlinks = length(links) – 1
        int indexrechts = length(rechts) – 1
        int indexergebnis = 0
    
                     // Funktion wird durchgeführt, solange der linke und rechte Teilbereich nicht leer sind
            while indexlinks < links.length und indexrechts < rechts.length
                    // Ist das erste Element des linken Arrays kleiner gleich dem ersten Element der rechten Seite
            if links[indexlinks] < rechts[indexrechts]
                            // dann füge das erste Element von links in das neue Array ein und entferne es aus dem alten
                neuesArray[indexergebnis] = links[indexlinks]
                indexlinks += 1
                    // ansonsten füge das erste Element von rechts ins neue Array ein und entferne es aus dem alten
            else neuesArray[indexergebnis] = rechts[indexrechts]
                indexrechts += 1
                indexergebnis += 1
            // Solange das linke Array nicht leer ist
        while indexlinks < links.length
            // füge das erste Element aus dem linken Bereich in das neue Array ein und entferne es aus dem alten
            neuesArray[indexergebnis] = links[indexlinks]
            indexlinks += 1
            indexergebnis += 1
            // Solange das rechte Array nicht leer ist
        while (indexrechts < rechts.length)
            // füge das erste Element aus dem rechten Bereich in das neue Array ein und entferne es aus dem alten
            neuesArray[indexergebnis] = rechts[indexrechts]
            indexrechts += 1
            indexergebnis += 1
            // Gib das neue Array zurück
        return neuesArray

    Mergesort – Das Wichtigste

    • Mergesort Definition: Mergesort ist ein effizienter, stabiler Sortieralgorithmus, der eine Datenmenge in Teilmengen einteilt und diese dann rückwärts wieder zusammenführt.
    • Mergesort Komplexität:
      • Die Laufzeit beträgt in Best-, Average- und Worst-Case jeweils O(n log n)
      • Die Platzkomplexität liegt bei O(n)
    • Mergesort Vor- und Nachteile:
      • Der Vorteil vom Mergesort ist seine gute Effizienz
      • Nachteil ist der vergleichsweise große Zwischenspeicher, der benötigt wird
    • Mergesort vs. Quicksort:

      • Mergsort ist stabil und hat immer eine Zeitkomplexität von O(n log n)

      • Quicksort ist instabil und die Zeitkomplexität beträgt im Worst-Case "nur" O(n2)

      • Trotzdem ist Quicksort schneller beim Sortieren als Mergesort

    • Mergesort Anwendung: Mergesort wird häufig bei verketteten Listen angewendet oder wenn ein externer Speicher verwendet wird.


    Nachweise

    1. Matthias Teschner (2012). Algorithmen und Datenstrukturen, Sortieren. cg.informatik.uni-freiburg.de (01.11.2022)
    2. Happycoders.eu: Mergesort – Algorithmus, Quellecode, Zeitkomplexität. (01.11.2022)
    Häufig gestellte Fragen zum Thema Mergesort

    Wie funktioniert Mergesort? 

    Mergesort teilt eine Datenmenge immer wieder in zwei gleich große Teilmengen ein und fügt diese im Anschluss schrittweise wieder zusammen und sortiert die Elemente dabei.  

    Warum ist Mergesort stabil? 

    Mergesort ist ein stabiler Algorithmus, weil beim Zusammenführen gleich große Werte in ihrer Reihenfolge nicht vertauscht werden.

    Ist Mergesort schnell? 

    Mergesort hat im Best-, Average- und Worst-Case eine Laufzeit von O(n log n) und gehört somit zu den effizienten Algorithmen.

    Warum ist Quicksort besser als Mergesort? 

    Quicksort verschiebt Elemente im Grunde einfach nur. Mergesort kopiert Elemente und hat deswegen den deutlich größeren zusätzlichen Speicher. Deswegen ist Quicksort in der Regel schneller als Mergesort.

    Erklärung speichern

    Teste dein Wissen mit Multiple-Choice-Karteikarten

    Wann wurde Mergesort erstmals vorgestellt?

    Wahr oder falschEs macht für die Laufzeit beim Mergesort keinen großen Unterschied, ob Elemente bereits vorsortiert oder zufällig angeordnet sind. 

    Wahr oder falschMergesort arbeitet immer in-place.

    Weiter

    Entdecke Lernmaterialien mit der kostenlosen StudySmarter App

    Kostenlos anmelden
    1
    Über StudySmarter

    StudySmarter ist ein weltweit anerkanntes Bildungstechnologie-Unternehmen, das eine ganzheitliche Lernplattform für Schüler und Studenten aller Altersstufen und Bildungsniveaus bietet. Unsere Plattform unterstützt das Lernen in einer breiten Palette von Fächern, einschließlich MINT, Sozialwissenschaften und Sprachen, und hilft den Schülern auch, weltweit verschiedene Tests und Prüfungen wie GCSE, A Level, SAT, ACT, Abitur und mehr erfolgreich zu meistern. Wir bieten eine umfangreiche Bibliothek von Lernmaterialien, einschließlich interaktiver Karteikarten, umfassender Lehrbuchlösungen und detaillierter Erklärungen. Die fortschrittliche Technologie und Werkzeuge, die wir zur Verfügung stellen, helfen Schülern, ihre eigenen Lernmaterialien zu erstellen. Die Inhalte von StudySmarter sind nicht nur von Experten geprüft, sondern werden auch regelmäßig aktualisiert, um Genauigkeit und Relevanz zu gewährleisten.

    Erfahre mehr
    StudySmarter Redaktionsteam

    Team Informatik Lehrer

    • 10 Minuten Lesezeit
    • Geprüft vom StudySmarter Redaktionsteam
    Erklärung speichern Erklärung speichern

    Lerne jederzeit. Lerne überall. Auf allen Geräten.

    Kostenfrei loslegen

    Melde dich an für Notizen & Bearbeitung. 100% for free.

    Schließ dich über 22 Millionen Schülern und Studierenden an und lerne mit unserer StudySmarter App!

    Die erste Lern-App, die wirklich alles bietet, was du brauchst, um deine Prüfungen an einem Ort zu meistern.

    • Karteikarten & Quizze
    • KI-Lernassistent
    • Lernplaner
    • Probeklausuren
    • Intelligente Notizen
    Schließ dich über 22 Millionen Schülern und Studierenden an und lerne mit unserer StudySmarter App!
    Mit E-Mail registrieren