270 likes | 651 Views
Sortierverfahren. Vortrag: Ingo Gensch, Mathias Reich am: 11.12.2000. Was sind Sortieralgorithmen.
E N D
Sortierverfahren Vortrag: Ingo Gensch, Mathias Reich am: 11.12.2000 DVG1 - 12 - Sortierverfahren
Was sind Sortieralgorithmen • Das Sortieren ist ein Verfahren zum Herstellen einer definierten (geordneten) Sequenz von Objekten entsprechend einer Ordnung bzw. der Vorgang des Anordnens von Objekten zu einer definierten Sequenz entsprechend einer Ordnung • Zielsetzung: • Vereinfachung des Findens von Objekten mit Hilfe einfacher Suchverfahren DVG1 - 12 - Sortierverfahren
Wo braucht man Sortierverfahren? • wenn große Datenmengen vorhanden sind und sortiert werden sollen • Wenn zu einer bereits bestehenden, sortierten Datenmenge neue Elemente hinzugefügt werden müssen • Sortierte Datenbestände sind z.B.: • Telefonbuch • Register • Kataloge • usw. DVG1 - 12 - Sortierverfahren
Wassortieren wir? • Elektronische Daten • Zahlen • Zeichenketten • Adressen • Datenbänke • usw. DVG1 - 12 - Sortierverfahren
Was sind gute Algorithmen? Oder gibt es einen besten Sortieralgorithmus für alle Datensätze? • Die Effektivität der Sortieralgorithmen ist abhängig von der Art der bestehenden Daten • vorsortierte Daten? • Steht die Menge der zu sortierenden Daten im Verhältnis zum Programmierumfang? • Geschwindigkeit der Sortierung der Daten wichtig? DVG1 - 12 - Sortierverfahren
Geschwindigkeit der Sortierung • Abhängig vom Sortierverfahren • Abhängig von der Anzahl der arithmetischen Funktionen • Das theoretisch schnellste Sortierverfahren: • Jeder Wert der Datenmenge muss mit jedem anderen Wert der Datenmenge verglichen werden d.h. wenn n die Anzahl der Werte ist, dann hat das effizienteste Sortierprogramm genau n*(n-1) Vergleiche und maximal n Vertauschungen DVG1 - 12 - Sortierverfahren
Computer und Sortieren • Sortieralgorithmen haben sich parallel zur Entwicklung der Computer weiterentwickelt • Früher: Computer waren zu langsam, Technik noch nicht ausgereift. => Hauptaugenmerk auf neue/bessere Algorithmen • Gegenwart: Prozessorentwicklung boomt => Weniger Interesse an guten Algorithmen, da Prozessoren immer schneller werden • Zukunft: Maximale (physikal.) Prozessorgeschwindigkeit? => wieder bessere Algorithmen? DVG1 - 12 - Sortierverfahren
Prinzipien des Sortierens • Vorsortierte Menge neuer Datensatz • Sortierprinzip: Vergleich und sofortiger Austausch (z.B. BubbleSort) ? DVG1 - 12 - Sortierverfahren
Sortierprinzip: Vergleich solange bis der neue Datensatz an der richtigen Stelle ist und dann wird erst der neue Datensatz eingefügt (z.B. InsertSort) ? DVG1 - 12 - Sortierverfahren
Arten von Sortieralgorithmen DVG1 - 12 - Sortierverfahren
BubbleSort DVG1 - 12 - Sortierverfahren
Bubblesort (Theorie) • Es gibt eine unsortierte Datenmenge der Größe n • Man vergleicht das erste Feld mit dem Zweiten • wenn erstes Feld größer ist als das Zweite, dann Vertauschung der beiden Feldern • Man vergleicht die nächsten beiden Felder analog • Wenn die letzten beiden Felder verglichen sind, Wiederholung mit der Feldgröße (n-1) • Wenn keine Vertauschungen dabei stattgefunden haben, ist die Menge sortiert • Anzahl der maximalen Vergleiche und Vertauschungen: (n*(n-1))/2 + (n*(n-1))/2 = n^2-n DVG1 - 12 - Sortierverfahren
Quelltext von BubbleSort for (int i = a.length-1; i>0;i--) { boolean getauscht = false; for (int j = 0; j<i; j++) { if (a[j] > a[j+1]) { int h = a[j]; a[j] = a[j+1]; a[j+1] = h; getauscht = true; } } if (!getauscht) return; } DVG1 - 12 - Sortierverfahren
InsertSort DVG1 - 12 - Sortierverfahren
InsertSort (Theorie) • Vergleich der ersten beiden Werte • kleinerer Wert wird sich gemerkt • Der Wert wird mit dem Nächsten verglichen • Am Ende der Datenmenge wird der gemerkte (kleinste) Wert an die erste Stelle geschrieben • Wiederholung mit der Feldgröße (n-1) • Anzahl der Vergleiche und Vertauschungen : (n*(n-1))/2 + n = (n^2+n)/2 DVG1 - 12 - Sortierverfahren
Quelltext von InsertSort int min_index; int anz = a.length-1; int minimum; for(int i=0;i<anz;i++) { min_index = i; for(int j=min_index+1;j<anz; j++); { if (a[j]<a[min_index]) min_index=j; } if min_index>i { minimum=a[min_index]; for (int j=min_index; j>i; j--) a[j]=a[j-1]; a[i]=minimum; } } DVG1 - 12 - Sortierverfahren
QuickSort DVG1 - 12 - Sortierverfahren
Quicksort (Theorie) • Prinzip: „Teile und herrsche!“ • Aufteilung der Datenmenge in zwei beliebig große Blöcke • kleinere Werte auf eine Seite, größere auf die andere Seite vorsortieren • Jeden einzelnen Unterblock wiederum unterteilen • Wenn Blockgröße auf 1 geschrumpft ist, ist die Menge sortiert • Anzahl der Vergleiche und Vertauschungen Abhängig von den Werten : ca. n*log(n) DVG1 - 12 - Sortierverfahren
Struktogramm von QuickSort (rekursive Programmierung) • Siehe Blatt DVG1 - 12 - Sortierverfahren