1 / 18

Mergesort

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

abba
Download Presentation

Mergesort

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Mergesort Divide and Conquer

  2. Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Gliederung • Allgmeine Informationen • Funktionsweise • Der Algorithmus • Implementierung • Vor- und Nachteile • Vergleich mit Insertionsort • Quellen

  3. 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

  4. 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

  5. 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):

  6. 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):

  7. 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):

  8. 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):

  9. 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):

  10. 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):

  11. 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):

  12. 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):

  13. 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):

  14. Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Implementierung mergeSort(…) 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); } }

  15. Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Implementierung mergeSort(…) merge() 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++]; } 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); } }

  16. 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 Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Vor- und Nachteile

  17. 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) Insertionsort Mergesort • kompliziert • stabil • bei großen Datenmengen effizient • bei vorsortierten Datenmengen ineffizient • zu n proportionaler Speicherbedarf (out-of-place)

  18. 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

More Related