M a r c – o l i v e r p a h l Informatik II – Kapitel 12 „Sortier-Algorithmen“ Zusammenfassung des Kapitel 12 Küchlin, Weber, Einführung in die Informatik,

Slides:



Advertisements
Ähnliche Präsentationen
Klassen - Verkettete Liste -
Advertisements

Informatik II – Kapitel 11
Sortieren I - Bubblesort -
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
WS 03/041 Algorithmentheorie 01 - Einleitung Prof. Dr. S. Albers Prof. Dr. Th. Ottmann.
Hochschule Fulda – FB ET Sommersemester 2010
Lineare Suche Divide-and-Conquer-Suche Kombinationssuche
„Such-Algorithmen“ Zusammenfassung des Kapitels 11
Kapitel 6: Klassifizierung von Sortiertechniken
G.Heyer Algorithmen und Datenstrukturen II 1 Algorithmen und Datenstrukturen II Wintersemester 2000 / 2001 Prof. Dr. Gerhard Heyer Institut für Informatik.
Kapitel 7. Sortier-Algorithmen
Kapitel 6. Suchverfahren
<d,a,s, ,i,s,t, ,e,i,n,e, ,L,i,s,t,e>
Kapitel 3: Listen Lineare Liste: endliche Folge von Elementen eines Grundtyps (n>=0), leere Liste falls n=0 Listenelemente besitzen.
5. Sortier-Algorithmen Vorbemerkungen:
Sortieren mit Binären Bäumen
Sortierverfahren Richard Göbel.
Sortierverfahren Richard Göbel.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (04 – Entwurfsverfahren) Prof. Th. Ottmann.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (08 - Einfache Sortierverfahren) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (13 – Offenes Hashing) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (10 - Suchverfahren) T. Lauer.
Algorithmen und Datenstrukturen
Algorithmen und Datenstrukturen
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 9 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Algorithmen und Datenstrukturen
WS 06/07 Algorithmentheorie 01 - Einleitung Prof. Dr. Th. Ottmann Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (07 - Skiplisten) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (09 - Weitere Sortierverfahren) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
Vortrag: Ingo Gensch, Mathias Reich am:
Bubbelsort und Quicksort Vortrag von Rolf Heitzenröder
Mergesort Divide and Conquer
Einfach verkettete Listen
Einfach verkettete Listen (OOP)
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Rekursion mit Listen: Quicksort
4 Sortierverfahren 4.1 Einführung 4.2 Naive Sortierverfahren
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Sortieralgorithmen Sortieren von Arrays.
Einführung in die Programmierung
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut für Wirtschaftsinformatik- Software Engineering JKU Linz.
1.6 Die Datenstruktur Stapel Ein Stapel (Stack) ist ein Sonderfall einer Liste. Die Elemente werden nach dem Prinzip LIFO (Last In First Out) angefügt.
Einfach und doppelt verkettete Listen in JAVA by Jens Weibler
Grundlegende Sortieralgorithmen
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Thomas Hilpold: Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Programmieren in C Sortieren, Suchen
Sortieralgorithmen Greedy Sortieren: Sortieren durch Auswahl, Einfügen und Austauschen Divide-and-Conquer-Sortieren: Quicksort und merge sort Foliensatz.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Rekursion-
Diskrete Mathe Diskrete Mathematik I Listen Vorlesung 4.
InsertionSort Einfügen eines Elements an der richtigen Stelle eines bereits sortierten Arrays. Verschiebungen von Elementen statt Vertauschungen Element.
1 // Verkettete Liste 2 // demonstriert verkettete Listen und // Rekursion // (Einfügen am "Fuß") // #include struct Liste { int Element; Liste *weiter;
 Präsentation transkript:

m a r c – o l i v e r p a h l Informatik II – Kapitel 12 „Sortier-Algorithmen“ Zusammenfassung des Kapitel 12 Küchlin, Weber, Einführung in die Informatik, 2.Auflage

2 m a r c – o l i v e r p a h l Sortierverfahren Greedy SelectionSort (durch Auswahl) InsertionSort (durch Einfügen) BubbleSort (durch Vertauschen) Divide & Conquer –Hard Split/ Easy Join QuickSort –Easy Split/ Hard Join MergeSort

3 m a r c – o l i v e r p a h l newList: this: Greedy.SelectionSort (auf Liste) public OrderedList selectionSort() { int min ; OrderedList newList = new OrderedList() ; while( head != null ){ min = findMin() ; deleteElem(min) ; newList.insertLast(min) ; } return newList ; } Anmerkung: Diese Implementierung baut eine neue Liste auf, man könnte zum Sortieren auch die Verkettungs- reihenfolge auf der bestehenden Liste ändern. Letztendlich läuft es aber auf fast dasselbe hinaus, da die nicht mehr verlinkten ListNodes automatisch durch den garbage collector im Speicher freigegeben werden.

4 m a r c – o l i v e r p a h l data: Greedy.SelectionSort (auf Reihung) Comparable[] data ; public void selectionSort() { int min ; for( int next = 0; next < data.length-1; next ++ ){ min = findMin( next, data.length-1 ) ; swap( next, min ) ; } next: 0; min: 3; next: 1; min: 1; next: 2; min: 2; next: 3; min: 4; Anmerkung: „Diese Implementierung führt nur Vertauschungen durch. Daher ist die Reihung sehr gut geeignet.“

5 m a r c – o l i v e r p a h l resList: this: Greedy.InsertionSort (auf Liste) public OrderedList insertionSort() { Comparable first ; OrderedList resList = new OrderedList() ; while( head != null ){ first = takeFirst() ; resList.insertSorted(first) ; } return resList ; }

6 m a r c – o l i v e r p a h l Greedy.BubbleSort (auf Reihung) Comparable[] data ; public void bubbleSort() { for( int last = data.length-1; last > 0; last - - ) for( int i = 1; i <= last ; i ++ ){ if ( data [ i -1].compareTo( data [ i ] ) > 0 ) swap( i -1, i) ; } i: 1; last: 4; i: 2; last: 4; i: 3; last: 4; i: 4; last: 4; i: 4; last: 4; i: 1; last: 3; i: 2; last: 3; i: 3; last: 3; i: 2; last: 2; i: 1; last: 1; …

7 m a r c – o l i v e r p a h l D&C.QuickSort (auf Reihung) Hard Split/ Easy Join:  Wähle ein Pivot-Element p; (in unserer Implementierung das erste El.)  Teile die Folge ohne p in „ p“;  Fahre rekursiv mit den entstandenen Teilmengen fort bis diese einele- mentig sind; Bentley Split: private int partition(int left, int right ) { int middle = left ; int pivot = data [ left ]; for(int i = left + 1; i <= right ; i ++) { if ( data [ i ] < pivot ) { swap (++ middle, i ); } swap ( left, middle ); // Pivot an die richtige Position return middle ; // Position des Pivot } partition( 0, 4) : i middle

8 m a r c – o l i v e r p a h l D&C.MergeSort (auf Liste) Easy Split/ Hard Join:  Teile die Folge in der Mitte;  Fahre rekursiv mit den entstandenen Teilmengen fort bis diese einele- mentig oder leer sind;  Baue die Listen auf dem Rückweg durch die Rekursion sortiert zusammen. merge( List a, List b ) { „Betrachte jeweils das erste Element von a und b und lösche das Kleinere aus seiner Liste und füge es als Nächstes an die neue Liste an.“ } mergeSort( ) { „Wenn selbst nicht leer: Teile an (this.length-1) / 2 in aList und bList.“ aList.mergeSort(); bList.mergeSort(); merge( aList, bList ); }

9 m a r c – o l i v e r p a h l D&C.MergeSort (auf Liste) merge( List a, List b ) { „Betrachte jeweils das erste Element von a und b und lösche das Kleinere aus seiner Liste und füge es als Nächstes an die neue Liste an.“ } mergeSort( ) { „Wenn selbst nicht leer: Teile an (this.length-1) / 2 in aList und bList.“ aList.mergeSort(); bList.mergeSort(); merge( aList, bList ); } splitmerge 223

10 m a r c – o l i v e r p a h l Zugrunde liegende Datenstruktur Anhand der unterschiedlichen Struktur der Algorithmen bieten sich auch unterschiedliche Verfahren für unterschiedliche zugrunde-liegende Datenstrukturen an:  Verkettete Liste:  Kein direkter Elementzugriff (-)  Einfügen an beliebiger Stelle möglich, ohne viele Elemente kopieren zu müssen (+) Daher besonders geeignet für InsertionSort und MergeSort.  Reihung:  Einfügen von Elementen unter Beibehaltung der Sortierung erfordert das Kopieren vieler Elemente (alle nach der Einfügestelle) (-)  Direkter Element-Zugriff (+) Daher besonders geeignet für SelectionSort, BubbleSort und QuickSort, wo es keine Einfügungen gibt.