Mergesort

18
Präsentationsprüfung Informa tik 2005 Patrick Stürmlinger Mergesort Divide and Conquer

description

Mergesort. Divide and Conquer. Gliederung. Allgmeine Informationen Funktionsweise Der Algorithmus Implementierung Vor- und Nachteile Vergleich mit Insertionsort Quellen. Allgemeine Informationen. 1945 von John von Neumann vorgestellt rekursiv - PowerPoint PPT Presentation

Transcript of Mergesort

Page 1: Mergesort

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger

Mergesort

Divide and Conquer

Page 2: Mergesort

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger

Gliederung

1. Allgmeine Informationen

2. Funktionsweise

3. Der Algorithmus

4. Implementierung

5. Vor- und Nachteile

6. Vergleich mit Insertionsort

7. Quellen

Page 3: Mergesort

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger

Allgemeine Informationen

1945 von John von Neumann vorgestellt rekursiv funktioniert nach dem Prinzip „Teile und

herrsche“

betrachtet zu sortierende Daten als Liste teilt Daten in kleinere Listen und sortiert diese Teillisten werden wieder zusammengeführt

Page 4: Mergesort

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger

Funktionsweise

Listen werden so weit wie möglich geteilt paarweise Vermischung der Teile

größere, sortierte Teillisten entstehen

Teillisten werden nacheinander zu einer Liste kombiniert sortierte Gesamtliste

Page 5: Mergesort

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger

Der Algorithmus

bestehend aus rekursiver Funktion mergesort() und Mischfunktion merge()

mergeSort(int[] liste, int links, int rechts): rekursiv Aufruf von merge()

merge(int[] listeA, int[] listeB, int links, int mitte, int rechts):

Page 6: Mergesort

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger

Der Algorithmus

bestehend aus rekursiver Funktion mergesort() und Mischfunktion merge()

mergeSort(int[] liste, int links, int rechts): rekursiv Aufruf von merge()

merge(int[] listeA, int[] listeB, int links, int mitte, int rechts):

Page 7: Mergesort

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger

Der Algorithmus

bestehend aus rekursiver Funktion mergesort() und Mischfunktion merge()

mergeSort(int[] liste, int links, int rechts): rekursiv Aufruf von merge()

merge(int[] listeA, int[] listeB, int links, int mitte, int rechts):

Page 8: Mergesort

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger

Der Algorithmus

bestehend aus rekursiver Funktion mergesort() und Mischfunktion merge()

mergeSort(int[] liste, int links, int rechts): rekursiv Aufruf von merge()

merge(int[] listeA, int[] listeB, int links, int mitte, int rechts):

Page 9: Mergesort

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger

Der Algorithmus

bestehend aus rekursiver Funktion mergesort() und Mischfunktion merge()

mergeSort(int[] liste, int links, int rechts): rekursiv Aufruf von merge()

merge(int[] listeA, int[] listeB, int links, int mitte, int rechts):

Page 10: Mergesort

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger

Der Algorithmus

bestehend aus rekursiver Funktion mergesort() und Mischfunktion merge()

mergeSort(int[] liste, int links, int rechts): rekursiv Aufruf von merge()

merge(int[] listeA, int[] listeB, int links, int mitte, int rechts):

Page 11: Mergesort

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger

Der Algorithmus

bestehend aus rekursiver Funktion mergesort() und Mischfunktion merge()

mergeSort(int[] liste, int links, int rechts): rekursiv Aufruf von merge()

merge(int[] listeA, int[] listeB, int links, int mitte, int rechts):

Page 12: Mergesort

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger

Der Algorithmus

bestehend aus rekursiver Funktion mergesort() und Mischfunktion merge()

mergeSort(int[] liste, int links, int rechts): rekursiv Aufruf von merge()

merge(int[] listeA, int[] listeB, int links, int mitte, int rechts):

Page 13: Mergesort

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger

Der Algorithmus

bestehend aus rekursiver Funktion mergesort() und Mischfunktion merge()

mergeSort(int[] liste, int links, int rechts): rekursiv Aufruf von merge()

merge(int[] listeA, int[] listeB, int links, int mitte, int rechts):

Page 14: Mergesort

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger

void mergeSort(int[] liste, int[] hilfsListe, int lo, int hi){ if (links<rechts) { int mitte=(links+rechts)/2; mergeSort(liste, hilfsListe, links, mitte); mergeSort(liste, hilfsListe, mitte+1, rechts); merge(liste, hilfsListe, links, mitte, rechts); }}

ImplementierungmergeSort(…)

Page 15: Mergesort

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger

void mergeSort(int[] liste, int[] hilfsListe, int lo, int hi){ if (links<rechts) { int mitte=(links+rechts)/2; mergeSort(liste, hilfsListe, links, mitte); mergeSort(liste, hilfsListe, mitte+1, rechts); merge(liste, hilfsListe, links, mitte, rechts); }}

Implementierung

void merge(int[] listeA, int[] listeB, int links, int mitte, int rechts){ int i, j, k; // beide Hälften von listeA in Hilfsarray listeB kopieren for (i=links; i<=rechts; i++) listeB[i] = listeA[i];

i=links; j=mitte+1; k=links; // jeweils das nächstgrößte Element zurückkopieren while (i<=mitte && j<=rechts) if (listeB[i] <= listeB[j]) listeA[k++]=listeB[i++]; else listeA[k++]=listeB[j++]; // Rest der vorderen Hälfte falls vorhanden zurückkopieren while (i<=mitte) listeA[k++]=listeB[i++];}

merge()mergeSort(…)

Page 16: Mergesort

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger

Vor- und Nachteile

+ stabil+ im ungünstigsten Fall

eine Laufzeit proportional zu n: n*log(n) (siehe später im Kurs)

+ kann Daten sequentiell abarbeiten

- ein zu n proportionaler zusätzlicher Speicher wird benötigt

Page 17: Mergesort

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger

Vergleich mit Insertionsort

einfach zu implementieren stabil bei großen Datenmengen wenig

effizient bei vorsortierten Datenmengen

effizient wenig Speicherbedarf (in-place)

kompliziert stabil bei großen Datenmengen

effizient bei vorsortierten Datenmengen

ineffizient zu n proportionaler

Speicherbedarf (out-of-place)

Insertionsort Mergesort

Page 18: Mergesort

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger

Quellen

Algorithmen - Eine Einführung Autoren: Cormen, Leierson, Rivest und Stein Verlag: Oldenbourg Erscheinungsdatum: 8. September 2004

http://de.wikipedia.org/ „mergesort“ „insertionsort“ Stand: 17.06.2005

http://www.linux-related.de/index.html?/coding/sort/sort_merge.htm Stand: 17.06.2005