Übungsblatt VU Algorithmen und Datenstrukturen 1 VU 6.0

Größe: px
Ab Seite anzeigen:

Download "Übungsblatt 2 186.813 VU Algorithmen und Datenstrukturen 1 VU 6.0"

Transkript

1 Übungsblatt VU Algorithmen und Datenstrukturen 1 VU September 2013 Aufgabe 11 Sortieren Sie die folgende Zahlenfolge mit Hilfe von Quicksort 111, 11, 1, 1, 110, 111, 1 Schreiben Sie dabei nach jedem Schritt des Algorithmus die entstandene Zahlenfolge auf und markieren Sie jeweils die aktuellen Pivotelemente, alle bereits sortierten Elemente und die im jeweiligen Schritt vertauschten Elemente. Geben Sie eine beliebige Eingabefolge an, die für Quicksort (Implementierung laut Skriptum, Pivotlement ist das rechteste Element) einen Worst-Case bezogen auf die Anzahl der Schlüsselvergleiche darstellt. Wie viele Schlüsselbewegungen und Schlüsselvergleiche, in Θ-Notation in Abhängigkeit der Eingabegröße n, werden für Ihre Eingabefolge benötigt? Lösung Folgende Farben werden im folgenden verwendet: Pivotelement, sortierte Elemente, vertauschte Elemente (Java-Code siehe Listing 1) , 11, 1, 1, 110, 111, 1 2. Quicksort(0,6) , 11, 1, 1, 110, 111, , 11, 1, 111, 110, 111, , 1, 11, 111, 110, 111, , 1, 1, 111, 110, 111, Quicksort(0,1) 8. 1, 1, 1, 111, 110, 111, Quicksort(0,-1) 10. Quicksort(1,1) 1

2 11. Quicksort(3,6) 12. 1, 1, 1, 111, 110, 111, , 1, 1, 11, 110, 111, Quicksort(3,2) 15. Quicksort(4,6) 16. 1, 1, 1, 11, 110, 111, Quicksort(4,4) 18. Quicksort(6,6) 19. 1, 1, 1, 11, 110, 111, 111 Folgende Eingabe 1, 2, 3, 4, 5, 6, 7 bewirkt für Quicksort ein Worst-Case-Szenario. Für dieses Worst-Case Szenario kommt es zu Θ(n 1) Θ(n) Schlüsselbewegungen und Θ( n n 2 2) Θ(n 2 ) Schlüsselvergleiche. 1 public class bsp11 2 { Listing 1: Quicksort 3 private static int bew, vgl1, vgl2 ; 4 private static int calls ; 5 6 // would be called on startup... 7 public static void main ( String [] args ) 8 { 9 calls = 0; 10 bew = 0; 11 vgl1 = 0; 12 vgl2 = 0; 13 int [] val1 = {10,11,1,0,101,111,01,00}; 14 quicksort (val1,0, val1. length -1); 15 System. out. println (" Bewegungen :" + bew + ", Vergleiche :" + vgl1 + "+" 16 } public static void quicksort ( int [] values, int l, int r) { if( calls <100) { 21 calls ++; 22 System. out. println (" quicksort (" + values [l] + "," + values [r] + " 23 // System. out. println (" quicksort (" + l + "," + r + ")"); 24 if(l<r) { 25 int x = values [r]; printvalues ( values ); 28 int p = partition ( values, l, r, x); 29 2

3 30 System. out. println (" partition returning : l:" + values [l] + " p:" 31 if(l!=p) { 32 quicksort ( values, l,p -1); 33 } 34 if(p!=r) { 35 quicksort ( values, p+1,r); 36 } 37 } 38 } 39 } public static int partition ( int [] values, int l, int r, int x) { 42 System. out. println (" partition (" + values [l] + "," + values [r] + "," + 43 int i =l -1; 44 int j=r; 45 do { 46 do { 47 i ++; 48 vgl1 ++; 49 } while ( values [i]<x); 50 do { 51 j - -; 52 vgl2 ++; 53 } while (j>i && values [j]>x); 54 System. out. println ("i: "+ values [i] + ", j:" + values [j ]); 55 if(i<j) { 56 int tmp = values [i]; 57 values [i] = values [j]; 58 values [j] = tmp ; 59 printvalues ( values ); 60 bew ++; 61 } 62 } while (i<j); 63 int tmp = values [i]; 64 values [i] = values [r]; 65 values [r] = tmp ; 66 printvalues ( values ); 67 bew ++; 68 return i; 69 } public static void printvalues ( int [] values ) { 72 String out = String. format ( "%2d", values [0]); 73 for ( int i =1; i< values. length ; i ++) { 74 out += String. format ( ", %2d", values [i ]); 75 } 76 System. out. println ( out ); 77 } 3

4 78 } Aufgabe 12 Wie müsen Sie den Algorithmus Quicksort aus dem Skriptum adaptieren, damit für das Pivotelement einer Folge a 1,..., a n der Median von a 1, a n 2, a n verwendet wird? Führen Sie einerseits den veränderten Algorithmus, als auch den unveränderten Algorithmus aus dem Skriptum mit der folgenden Eingabefolge durch: 1, 2, 3, 4, 5, 6, 7, 8, 9 Lösung Man muss nur die Medianstelle (die Stelle, die vom Wert her zwischen den anderen beiden Werten liegt) immer auf die rechteste Stelle verschieben. Anschließend kann man den Algorithmus von vorhin wieder verwenden. (Java-Code siehe Listing 2) Algorithmus Quicksort(var A, l, r): Eingabe: Array A; Indexgrenzen l und r Ausgabe: sortierte Teilfolge in A[l],..., A[r] Variable(n): Schlüsselwert x; Index p 1: falls l < r dann { 2: m = (r l)/2 + l; 3: falls A[l] > A[m] dann { 4: vertausche A[l] und A[m]; 5: } 6: falls A[l] > A[r] dann { 7: vertausche A[l] und A[r]; 8: } 9: falls A[r] > A[m] dann { 10: vertausche A[r] und A[m]; 11: } 12: x = A[r].key; 13: p = P artition(a, l, r, x); 14: p = Quicksort(A, l, p 1); 15: p = Quicksort(A, p + 1, r); 16: } Durch diese Änderung hat das Programm eine wesentlich geringere Laufzeit als ohne. z.b. mit dem Folgenden Datensatz: 1, 2, 3, 4, 5, 6, 7, 8, 9 hat das Programm nur noch 36 anstatt 52 Vergleiche. Weiters wird die Prozedur Quicksort nur noch 11x vs. 17x aufgerufen. 1 public class bsp12 2 { Listing 2: Median-Quicksort 3 private static int bew, vgl1, vgl2 ; 4 4

5 5 // would be called on startup... 6 public static void main ( String [] args ) 7 { 8 bew = 0; 9 vgl1 = 0; 10 vgl2 = 0; 11 double [] val1 = {1,2,3,4,5,6,7,8,9}; 12 printvalues ( val1 ); 13 quicksort (val1,0, val1. length -1); 14 printvalues ( val1 ); 15 System. out. println (" Bewegungen :" + bew + ", Vergleiche :" + vgl1 + "+" 16 } public static void quicksort ( double [] values, int l, int r) { 19 System. out. println (" quicksort (" + l + "," + r + ")"); 20 if(l<r) { 21 int m = ( int ) Math. floor ((r-l )/2+ l); 22 // die folgenden zeilen bringen immer den median der 3 Stellen 23 // auf die r- Stelle und machen es somit zum pivot - element vgl1 +=3; 26 if( values [l]> values [m ]){ 27 bew ++; 28 double tmp = values [l]; values [l]= values [m]; values [m]= tmp ; } 29 if( values [l]> values [r ]){ 30 bew ++; 31 vgl1 - -; 32 double tmp = values [l]; values [l]= values [r]; values [r]= tmp ; } 33 else if( values [r]> values [m ]){ 34 bew ++; 35 double tmp = values [r]; values [r]= values [m]; values [m]= tmp ; } 36 double x = values [r]; 37 int p = partition ( values, l, r, x); 38 quicksort ( values, l,p -1); 39 quicksort ( values, p+1,r); 40 } 41 } public static int partition ( double [] values, int l, int r, double x) { 44 int i =l -1; 45 int j=r; 46 do { 47 do { 48 i ++; 49 vgl1 ++; 50 } while ( values [i]<x); 51 do { 52 j - -; 5

6 53 vgl2 ++; 54 } while (j>i && values [j]>x); 55 if(i<j) { 56 double tmp = values [ i]; 57 values [i] = values [j]; 58 values [j] = tmp ; 59 printvalues ( values ); 60 bew ++; 61 } 62 } while (i<j); 63 double tmp = values [ i]; 64 values [i] = values [r]; 65 values [r] = tmp ; 66 printvalues ( values ); 67 bew ++; 68 return i; 69 } public static void printvalues ( double [] values ) { 72 String out = String. format ( "%2f", values [0]); 73 for ( int i =1; i< values. length ; i ++) { 74 out += String. format ( ", %2f", values [i ]); 75 } 76 System. out. println ( out ); 77 } 78 } Aufgabe 13 Führen Sie auf der Zahlenfolge 12, 9, 10, 8, 7, 11, 6 den Algorithmus Heapsort aus um die Zahlenfolge aufsteigend zu sortieren. Geben sie sowohl das Feld als auch den Heap in seiner Baumform nach dem Aufruf von ErstelleHeap() und dann nach jedem Versickerungschritt an. (Java-Code siehe Listing 3) Lösung i Die Eingangs-Zahlenfolge 12, 9, 10, 8, 7, 11, 6 als Heap dargestellt: siehe Abbildung Abbildung 1: Eingangs-Zahlenfolge 12, 9, 10, 8, 7, 11, 6 als Heap dargestellt. 6

7 ii Die Zahlenfolge nach dem Aufruf von ErstelleHeap: 12, 9, 11, 8, 7, 10, 6 als Heap dargestellt: siehe Abbildung Abbildung 2: Zahlenfolge nach ErstelleHeap: 12, 9, 10, 8, 7, 11, 6 als Heap dargestellt. iii Die Zahlenfolge nach dem Aufruf von Versickere(1,6): 11, 9, 10, 8, 7, 6, 12 als Heap dargestellt: siehe Abbildung Abbildung 3: Zahlenfolge nach Versickere(1,6): 11, 9, 10, 8, 7, 6 als Heap dargestellt. iv Die Zahlenfolge nach dem Aufruf von Versickere(1,5): 10, 9, 6, 8, 7, 11, 12 als Heap dargestellt: siehe Abbildung Abbildung 4: Zahlenfolge nach Versickere(1,5): 10, 9, 6, 8, 7 als Heap dargestellt. v Die Zahlenfolge nach dem Aufruf von Versickere(1,4): 9, 8, 6, 7, 10, 11, 12 als Heap dargestellt: siehe Abbildung Abbildung 5: Zahlenfolge nach Versickere(1,4): 9, 8, 6, 7 als Heap dargestellt. vi Die Zahlenfolge nach dem Aufruf von Versickere(1,3): 8, 7, 6, 9, 10, 11, 12 als Heap dargestellt: siehe Abbildung 6 7

8 8 7 6 Abbildung 6: Zahlenfolge nach Versickere(1,3): 8, 7, 6 als Heap dargestellt. vii Die Zahlenfolge nach dem Aufruf von Versickere(1,2): 7, 6, 8, 9, 10, 11, 12 als Heap dargestellt: siehe Abbildung Abbildung 7: Zahlenfolge nach Versickere(1,2): 7, 6 als Heap dargestellt. viii Die Zahlenfolge nach dem Aufruf von Versickere(1,1): 6, 7, 8, 9, 10, 11, public class bsp13 2 { Listing 3: Heapsort 3 // would be called on startup... 4 public static void main ( String [] args ) 5 { 6 int [] val1 = {12,9,10,8,7,11,6}; 7 printvalues ( val1 ); 8 heapsort (val1, val1. length ); 9 printvalues ( val1 ); 10 } public static void heapsort ( int [] values, int n) { 13 erstelle_heap ( values, n); 14 System. out. println (" heap "); 15 printvalues ( values ); 16 for ( int i=n; i >=2; i - -) { 17 int tmp = values [i -1]; 18 values [i -1] = values [0]; 19 values [0] = tmp ; 20 versickere ( values,1,i -1); 21 } 22 } public static void versickere ( int [] values, int i, int m) { 25 System. out. println (" versickere " + i + ":" + m); 26 while (2*i <=m) { // values [i] hat linkes kind 27 int j =2* i; // values [j] ist linkes kind 28 if(j<m) { // values [i] hat rechtes kind 29 if( values [j -1] < values [j]) { 8

9 30 j ++; // values [ j] ist groesstes kind 31 } 32 } 33 if( values [i -1] < values [j -1]){ 34 int tmp = values [i -1]; 35 values [i -1] = values [j -1]; 36 values [j -1] = tmp ; 37 i=j; // versickere weiter 38 } else { 39 i = m; // Stopp : Heap - Bedingung ist erfuellt 40 } 41 } 42 printvalues ( values ); 43 } public static void erstelle_heap ( int [] values, int n) { 46 for ( int i=( int ) Math. floor (n /2);i >=1;i - -) { 47 versickere ( values,i,n); 48 } 49 } public static void printvalues ( int [] values ) { 52 String out = String. format ( "%2d", values [0]); 53 for ( int i =1; i< values. length ; i ++) { 54 out += String. format ( ", %2d", values [i ]); 55 } 56 System. out. println ( out ); 57 } 58 } Aufgabe 14 Gegeben sind folgenden oktale Zahlen (d.h. Zahlen zur Basis 8): 172, 152, 52, 357, 352, 152, 740, 0 Diese Zahlen sollen mit Hilfe des Verfahrens Sortieren durch Fachverteilung aufsteigend sortiert werden. Wählen Sie die Anzahl der Fächer entsprechend der Zahlenbasis und die Anzahl der Sammel- und Verteilungsphasen basierend auf der maximalen Stellenanzahl. Geben Sie die Inhalte aller Fächer nach jeder Verteilungsphase und die Reihenfolge der Zahlen nach jeder Sammelphase an. 9

10 Lösung Da die maximale Stellenanzahl der Zahlen 3 beträgt, bedeutet das, dass es 3 Verteilungsphasen und 3 Sammelphasen gibt. Weiters muss es, da die Zahlen zur Basis 8 gehören 8 Fächer geben. (Java-Code siehe Listing 4) 1. Verteilungsphase (siehe Tabelle 1) Fach Datensätze F 0 (0) 740, 0, F 1 (1) F 2 (2) 172, 152, 52, 352, 152 F 3 (3) F 4 (4) F 5 (5) F 6 (6) F 7 (7) 357 Tabelle 1: Verteilungsphase 1 Sammelphase: 740, 0, 172, 152, 52, 352, 152, Verteilungsphase (siehe Tabelle 2) Fach Datensätze F 0 (0) 0 F 1 (1) F 2 (2) F 3 (3) F 4 (4) 740 F 5 (5) 152, 52, 352, 152, 357 F 6 (6) F 7 (7) 172 Tabelle 2: Verteilungsphase 2 Sammelphase: 0, 740, 152, 52, 352, 152, 357, Verteilungsphase (siehe Tabelle 3) Fach Datensätze F 0 (0) 0, 52 F 1 (1) 152, 152, 172 F 2 (2) F 3 (3) 352, 357 F 4 (4) F 5 (5) F 6 (6) F 7 (7) 740 Tabelle 3: Verteilungsphase 3 Sammelphase: 0, 52, 152, 152, 172, 352, 357, public class bsp14 Listing 4: Sortieren durch Fachverteilung (Radix-Sort) 10

11 2 { 3 // would be called on startup... 4 public static void main ( String [] args ) 5 { 6 java. util. Vector < Integer > list = new java. util. Vector < Integer >(); 7 java. util. Collections. addall (list,172,152,52,357,352,152,740,0); 8 9 java. util. Vector [] faecher = { 10 new java. util. Vector < Integer >(), new java. util. Vector < Integer >(), 11 new java. util. Vector < Integer >(), new java. util. Vector < Integer >(), 12 new java. util. Vector < Integer >(), new java. util. Vector < Integer >(), 13 new java. util. Vector < Integer >(), new java. util. Vector < Integer >()} 14 for ( int schritt =1; schritt <=3; schritt ++) { 15 java. util. Iterator < Integer > itr = list. iterator (); 16 // verteilen 17 while ( itr. hasnext ()) { 18 Integer value = itr. next (); 19 int fach = value /( int ) Math. pow (10, schritt -1)%10; 20 faecher [ fach ]. add ( value ); 21 } 22 // sammeln 23 list. clear (); 24 for ( int i =0; i< faecher. length ; i ++) { 25 list. addall ( faecher [i ]); 26 faecher [i]. clear (); 27 } 28 System. out. println ("\ nschritt " + schritt + ":"); 29 printvector ( list ); 30 } 31 } 32 public static void printvector ( java. util. Vector < Integer > vector ) { 33 java. util. Iterator itr = vector. iterator (); 34 String output =""; 35 while ( itr. hasnext ()) { 36 output += itr. next (); 37 if(itr. hasnext ()) { 38 output += ","; 39 } 40 } 41 System. out. println ( output ); 42 } 43 } Aufgabe 15 11

12 (a) Sie haben eine nicht sortierte, einfach verkettete lineare Liste. Welches Sortierverfahren verwenden Sie, um die Liste zu sortieren? Begründen Sie Ihre Antwort. (b) Sie haben eine sortierte, einfach verkettete lineare Liste. An diese Liste wird hinten ein beliebig großes Element angehängt. Welches Sortierverfahren verwenden Sie in diesem Fall, um die Liste zu sortieren? Begründen Sie Ihre Antwort. (c) Sie haben eine nicht sortierte, doppelt verkettete lineare Liste. Welches Sortierverfahren verwenden Sie in diesem Fall, um die Liste zu sortieren? Begrüden Sie Ihre Antwort. (d) Sie haben eine absteigend sortierte, doppelt verkettete lineare Liste. Welches Sortierverfahren verwenden Sie in diesem Fall, um die Liste aufsteigend zu sortieren? Begründen Sie Ihre Antwort. Lösung (a) Mergesort, denn Mergesort läuft sequentiell (nacheinander, gegenteil wäre random-access), außerdem entfallen Bewegungen von Datensätzen komplett; stattdessen werden lediglich Listenzeiger geändert. (b) Insertionsort, denn hier wird nacheinander jedes Element in die bereits bestehende sortierte Liste eingefügt. Bei nur einem Element hat man hier eine Laufzeit von maximal Θ(n). (c) Quicksort könnte man hier anwenden, da man hier die Elemente von beiden Richtungen durchläuft. Da Quicksort meist in der Praxis erheblich schneller, als Mergesort ist, würde ich es vorziehen (Außer im Worst-Case) (d) Quicksort/Mergesort da die Liste bereits sortiert ist, ist man mit Quicksort aber bereits im Worst-Case (es ist egal in welche Richtung die Liste Sortiert ist) und hier müsste man sich beispielsweise mit der Median of 3-, oder mit einer Random-Methode aushelfen, um das Pivot zu bestimmen. Wenn man diese Tricks zur bestimmung des Pivotelements nicht anwendet, ist man langsamer als mit Merge-Sort. Somit geht die Sortierung auch mit Mergesort. Aufgabe 16 Schreiben Sie detaillierten Pseudocode für die Funktion merge(l 1, L 2 ). Dabei sind die Parameter L 1 und L 2 jeweils Zeiger auf das erste Element einer aufsteigend sortierten, azyklischen, einfach verketteten Liste. Als Rückgabe soll die Funktion merge(l 1, L 2 ) einen Zeiger auf das erste Element einer aufsteigend sortierten, einfach verketteten Liste liefern, die alle Elemente aus der Liste L 1 und L 2 enthält. Lösung Der folgende Pseudocode erzeugt diese verkettete, aufsteigend sortierte Liste. (Java- Code dazu: siehe Listing 1) Algorithmus merge(l 1, L 2 ): Eingabe: jeweils erstes Element der verketteten Listen L 1 und L 2 12

13 Ausgabe: aufsteigend Sortierte Liste mit Elementen aus Liste L 1 und L 2. 1: falls L 1 = NULL dann { 2: L = L 2 ; 3: } sonst falls L 2 = NULL dann { 4: L = L 1 ; 5: } sonst { 6: falls L 1.Inhalt < L 2.Inhalt dann { 7: L = L 1 ; 8: L 1 = L 1.Nachfolger; 9: } sonst { 10: L = L 2 ; 11: L 2 = L 2.Nachfolger; 12: } 13: h = L; 14: solange L 1 NULL L 2 NULL { 15: falls L 1 = NULL dann { 16: h.nachfolger = L 2 ; 17: L 2 = NULL; 18: } sonst falls L 2 = NULL dann { 19: h.nachfolger = L 1 ; 20: L 2 = NULL; 21: } sonst falls L 1.Inhalt < L 2.Inhalt dann { 22: h.nachfolger = L 1 ; 23: L 1 = L 1.Nachfolger; 24: } sonst { 25: h.nachfolger = L 2 ; 26: L 2 = L 2.Nachfolger; 27: } 28: h = h.nachfolger; 29: } 30: } 31: retourniere L; 1 public class bsp16 2 { 3 public class element { 4 private int inhalt ; 5 private element next ; 6 Listing 5: Merge von 2 verketteten Listen 7 public element ( int inhalt ) { 8 this ( inhalt, null ); 9 } public element ( int inhalt, element next ) { 12 this. inhalt = inhalt ; 13 this. next = next ; 14 } 13

14 15 16 public void setnext ( element next ) { 17 this. next = next ; 18 } public element getnext () { 21 return this. next ; 22 } public int getinhalt () { 25 return this. inhalt ; 26 } public String tostring () { 29 return new String ("" + this. inhalt ); 30 } 31 } // would be called on startup public static void main ( String [] args ) { 35 bsp16 program = new bsp16 (); 36 program. run (); 37 } public void run () { 40 element L1 = new element ( 20); 41 L1 = new element (17, L1 ); 42 L1 = new element (14, L1 ); 43 L1 = new element (10, L1 ); 44 L1 = new element (5, L1 ); 45 L1 = new element (2, L1 ); element L2 = new element ( 16); 48 L2 = new element (13, L2 ); 49 L2 = new element (3, L2 ); element Le = null ; printlist ( merge (L2,L1 )); 54 } public static element merge ( element L1, element L2) { 57 element L; 58 if(l1 == null ) { 59 L=L2; 60 } else if( L2 == null ) { 61 L=L1; 62 } else { 14

15 63 if(l1. getinhalt () < L2. getinhalt ()) { 64 L=L1; 65 L1=L1. getnext (); 66 } else { 67 L=L2; 68 L2=L2. getnext (); 69 } 70 element h= L; 71 while (L1!= null L2!= null ) { 72 if(l1 == null ) { 73 h. setnext (L2 ); 74 L2 = null ; 75 } else if(l2 == null ) { 76 h. setnext (L1 ); 77 L1 = null ; 78 } else if(l1. getinhalt () < L2. getinhalt ()) { 79 h. setnext (L1 ); 80 L1 = L1. getnext (); 81 } else { 82 h. setnext (L2 ); 83 L2 = L2. getnext (); 84 } 85 h=h. getnext (); 86 } 87 } 88 return L; 89 } public static void printlist ( element head ) { 92 System. out. println ( head ); 93 if( head. getnext ()!= null ) { 94 printlist ( head. getnext ()); 95 } 96 } 97 } Aufgabe 17 (a) Zeichnen Sie die angegebene Liste von Zahlen als doppelt verkettete zyklische Liste. 4, 34, 14, 24, 54, 44 (b) Fügen Sie in Ihre Liste das Element 10 direkt nach dem bereits existierenden Element 34 ein. Nennen Sie die dazu notwendigen Zeigeroperationen in der richtigen Reihenfolge, beginnend bei der Suche nach dem Element 34 vom Listenanfang an. Falls Sie eigene Zeiger auf Listenelemente benötigen, geben Sie auch deren Initialisierung an. 15

16 Lösung (a) 4, 34, 14, 24, 54, 44 als doppelt verkettete zyklische Liste (siehe Abbildung 8) L Abbildung 8: Eingangs-Zahlenfolge 4, 34, 14, 24, 54, 44 als doppelt verkettete Liste dargestellt. (b) 4, 34, 10, 14, 24, 54, 44 als doppelt verkettete zyklische Liste (siehe Abbildung 9) Die für das Einfügen benötigten Zeigeroperationen lauten wie folgt: 1: Neues Listenelement neu erzeugen; 2: neu.inhalt = 10; 3: neu.n achf olger = L.N achf olger.n achf olger; 4: neu.v orgaenger = L.N achf olger; 5: neu.n achf olger.v orgaenger = neu; 6: L.Nachfolger.Nachfolger = neu; L Abbildung 9: Eingangs-Zahlenfolge 4, 34, 10, 14, 24, 54, 44 als doppelt verkettete Liste dargestellt. Aufgabe 18 Schreiben Sie einen Algorithmus in Pseudocode, um aus einer aufsteigend sortierten, doppelt verketteten linearen Liste L (siehe Abbildung 10) ein Element x zu entfernen. Fertigen Sie auch eine Skizze hierfür an. L a 1 a 2... a n 16

17 Abbildung 10: Doppelt verkettete Liste Lösung Der Folgende Algorithmus enthält den Code für das entfernen eines Elementes aus einer doppelt verketteten Liste L. (Siehe auch Listing 6 für das Beispiel in Java) Algorithmus delete(l, x): Eingabe: das erste Element der doppelt verketteten Liste L, und der zu löschende Wert x Ausgabe: Liste L, jedoch mit einem Element das den Wert x hatte weniger. 1: falls L NULL dann { 2: falls L.Inhalt = x dann { 3: L = L.Nachfolger; 4: L.V orgaenger = NULL; 5: } sonst { 6: h = L.Nachfolger; 7: solange h NULL { 8: falls h.inhalt = x h.nachfolger = NULL dann { 9: h.v orgaenger.nachfolger = NULL; 10: } sonst falls h.inhalt = x dann { 11: h.v orgaenger.n achf olger = h.n achf olger; 12: h.n achf olger.v orgaenger = h.v orgaenger; 13: } 14: h = h.nachfolger; 15: } 16: } 17: } 18: retourniere L; Die Abbildung 11 enthält noch das Element x, wobei die Abbildung 12 das Element x nicht mehr enthält. L 1 x Abbildung 11: Doppelt verkettete Liste mit dem Element x L x Abbildung 12: Doppelt verkettete Liste mit dem entfernten Element x 17

18 Listing 6: Löschen eines Elementes aus einer doppelt verketteten Liste. 1 public class bsp18 2 { 3 public class element { 4 private int inhalt ; 5 private element next ; 6 private element previous ; 7 8 public element ( int inhalt ) { 9 this ( inhalt, null, null ); 10 } public element ( int inhalt, element next, element previous ) { 13 this. inhalt = inhalt ; 14 this. next = next ; 15 this. previous = previous ; 16 } public void setnext ( element next ) { 19 this. next = next ; 20 } public element getnext () { 23 return this. next ; 24 } public void setprevious ( element previous ) { 27 this. previous = previous ; 28 } public element getprevious () { 31 return this. previous ; 32 } public int getinhalt () { 35 return this. inhalt ; 36 } public String tostring () { 39 return new String ("" + this. inhalt ); 40 } 41 } // would be called on startup public static void main ( String [] args ) { 45 bsp18 program = new bsp18 (); 46 program. run (); 47 } 18

19 48 49 public void run () { 50 element L11 = new element ( 20); 51 element L12 = new element ( 17); 52 element L13 = new element ( 14); 53 element L14 = new element ( 10); 54 element L15 = new element ( 5); 55 L11. setnext ( L12 ); 56 L12. setnext ( L13 ); 57 L13. setnext ( L14 ); 58 L14. setnext ( L15 ); 59 L12. setprevious ( L11 ); 60 L13. setprevious ( L12 ); 61 L14. setprevious ( L13 ); 62 L15. setprevious ( L14 ); element Le = null ; printlist ( delete (L11,5)); 67 } public static element delete ( element L, int x) { 70 if(l!= null ) { 71 if(l. getinhalt ()== x) { 72 L=L. getnext (); 73 L. setprevious ( null ); 74 } else { 75 element h= L. getnext (); 76 while (h!= null ) { 77 if(h. getinhalt ()== x && h. getnext ()== null ) { 78 h. getprevious (). setnext ( null ); 79 } else if(h. getinhalt ()== x){ 80 h. getprevious (). setnext (h. getnext ()); 81 h. getnext (). setprevious (h. getprevious ()); 82 } 83 h=h. getnext (); 84 } 85 } 86 } 87 return L; 88 } public static void printlist ( element head ) { 91 System. out. println ( head ); 92 if( head. getnext ()!= null ) { 93 printlist ( head. getnext ()); 94 } 95 } 19

20 96 } Aufgabe 19 Bei der binären Suche wird immer mit dem mittleren Element des noch aktuellen Bereichs verglichen. Eine Abwandlung ist die sogenannte Exponentielle Suche. Diese kann eingesetzt werden, wenn der zu untersuchende Bereich zwar endlich, die Größe aber nicht bekannt ist. Algorithmus Exp-Search(var A, s, l, r): Eingabe: Array A; Suchschlüssel s; Indexgrenzen l und r Ausgabe: Position des Elements s in A; -1 falls nicht gefunden Variable(n): Potenz p 1: falls A[l].key == s dann { 2: return l; 3: } sonst falls A[r].key == s dann { 4: return r; 5: } sonst falls l > r dann { 6: return -1; 7: } 8: p = 1; 9: solange (l + p r) und (A[l + p].key < s) { 10: p = p*2; 11: } 12: return Exp-Search(A,s,l+p/2,min(r,l+p)); Gegeben ist ein Feld, das die folgenden Elemente in der angebenen Reihenfolge enthält: 2, 4, 5, 13, 14, 20, 27, 28, 33, 44, 45, 50, 51, 57, 59, 60, 64, 65, 78, 80 Führen Sie in dem angegebenen Feld eine Exponentielle Suche nach dem Element 64 durch. Geben Sie dabei in jedem Schritt die jeweiligen Schranken an. Lösung Tabelle 4: Array das durchsucht werden soll. Bereits nach dem 2. Rekursiven Aufruf von Exp-Search bricht die Funktion ab, da der Wert 64 bereits die rechte Grenze ist. (das 17. Element in dem Array) (Siehe auch Listing 7 für das Beispiel in Java) Liste rekursiver Aufrufe, um das Element mit dem Wert 64 zu suchen: Exp-Search(A, 64, 1, 20) (Schranke l=1, r=20); 20

21 Exp-Search(A, 64, 9, 17) (Schranke l=9, r=17); 1 public class bsp19 2 { Listing 7: Exp-Search 3 // would be called on startup... 4 public static void main ( String [] args ) 5 { 6 int [] val1 = {2,4,5,13,14,20,27,28,33,44,45,50,51,57,59,60,64,65,78, 7 System. out. println ( expsearch (val1, 64, 0, val1. length -1)); 8 } 9 10 public static int expsearch ( int [] values, int s, int l, int r) { 11 System. out. println (" expsearch (" + l + "," + r + ")"); 12 if( values [l] == s) { 13 return l; 14 } else if( values [r] == s) { 15 return r; 16 } else if(l>r) { 17 return -1; 18 } 19 int p = 1; 20 while (l+p <=r && values [l+p]<s) { 21 p = p *2; 22 } 23 return expsearch ( values, s, l+p/2, r<l+p?r:l+p); 24 } public static void printvalues ( int [] values ) { 27 String out = String. format ( "%2d", values [0]); 28 for ( int i =1; i< values. length ; i ++) { 29 out += String. format ( ", %2d", values [i ]); 30 } 31 System. out. println ( out ); 32 } 33 } Aufgabe 20 enthält: Gegeben ist ein Feld, das die folgenden Elemente in der angegebenen Reihenfolge 1, 6, 14, 21, 26, 31, 46, 76, 81, 86, 91, 96, 98 Führen Sie in dem angegebenen Feld eine Binärsuche nach dem Schlüssel 81 durch. Geben Sie dabei in jedem Schritt die jeweiligen Bereichsgrenzen an. 21

22 Wie hoch ist im Worst- und im Best-Case der Suchaufwand der Binärsuche in Abhängigkeit der Anzahl n der Elemente in einer Folge in Θ-Notation? Nach welchem(n) Schlüssel(n) müsste man in der oben angeführten Folge suchen, um den höchsten Suchaufwand in Abhängigkeit der Anzahl n der Elemente zu erhalten? Lösung Tabelle 5: Array das binär zu durchsuchen ist. Liste der erforderlichen Schitte, die gegangen werden müssen, um das Element 81 zu finden. (Siehe auch Listing 8 für das Beispiel in Java) l=1, r=13, m=7; l=8, r=13, m=10; l=8, r=9, m=8; l=9, r=9, m=9; Im Best-Case ist der Aufwand zum Suchen immer Θ(1). Im Worst-Case ist der Aufwand zum Suchen Θ(log 2 (n)). Wenn man nach den Schlüsseln 6, 21, 31, 81, 91 und 98 sucht, kommt man auf den höchsten Suchaufwand. 1 public class bsp20 2 { 3 public static int cnt ; 4 Listing 8: Exp-Search 5 // would be called on startup... 6 public static void main ( String [] args ) 7 { 8 int [] val1 = {1, 6, 14, 21, 26, 31, 46, 76, 81, 86, 91, 96, 98}; 9 System. out. println (" Returned Position : " + binarysearch (val1, 81, 0, for ( int i =0; i< val1. length ; i ++) { 12 cnt =0; 13 binarysearch (val1, val1 [i], 0, val1. length -1); 14 System. out. println ( val1 [i] + ": Durchlaeufe : " + cnt ); 15 } 16 } 17 22

23 18 public static int binarysearch ( int [] values, int s, int l, int r) { 19 int m; 20 do { 21 cnt ++; 22 m = (l+r +2)/2-1; 23 System. out. println ("l:" + l + " r:" + r + " m:" + m); 24 if( values [m] > s) { 25 r = m -1; 26 } else { 27 l = m +1; 28 } 29 } while (s!= values [m] && l <=r); 30 if(s == values [m]) { 31 return m; 32 } else { 33 return -1; 34 } 35 } public static void printvalues ( int [] values ) { 38 String out = String. format ( "%2d", values [0]); 39 for ( int i =1; i< values. length ; i ++) { 40 out += String. format ( ", %2d", values [i ]); 41 } 42 System. out. println ( out ); 43 } 44 } 23

Übungsblatt 1. f(n) = f(n) = O(g(n)) g(n) = O(f(n)) Zeigen oder widerlegen Sie: 3 n = Θ(2 n ) Aufgabe 1.2 Gegeben sei die folgende Funktion:

Übungsblatt 1. f(n) = f(n) = O(g(n)) g(n) = O(f(n)) Zeigen oder widerlegen Sie: 3 n = Θ(2 n ) Aufgabe 1.2 Gegeben sei die folgende Funktion: Übungsblatt 1 Aufgabe 1.1 Beweisen oder widerlegen Sie, dass für die im Folgenden definierte Funktion f(n) die Beziehung f(n) = Θ(n 4 ) gilt. Beachten Sie, dass zu einem vollständigen Beweis gegebenenfalls

Mehr

Beispielblatt VU Algorithmen und Datenstrukturen 1 VU 6.0

Beispielblatt VU Algorithmen und Datenstrukturen 1 VU 6.0 Beispielblatt 1 186.813 VU Algorithmen und Datenstrukturen 1 VU 6.0 25. September 2013 Aufgabe 1 (a) Bringen Sie folgende Laufzeitfunktionen, in Abhängigkeit von n in Θ-otation, in die aufsteigende Reihenfolge.

Mehr

186.172 Algorithmen und Datenstrukturen 1 VL 4.0 1. Übungstest WS 2010/11 26. November 2010

186.172 Algorithmen und Datenstrukturen 1 VL 4.0 1. Übungstest WS 2010/11 26. November 2010 Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen 186.172 Algorithmen und Datenstrukturen 1 VL 4.0 1. Übungstest WS 2010/11 26.

Mehr

Informatik I 4. Kapitel Suchen in sequentiellen Listen

Informatik I 4. Kapitel Suchen in sequentiellen Listen Informatik I 4. Kapitel Rainer Schrader Zentrum für Angewandte Informatik Köln 21. Mai 2008 1 / 55 2 / 55 Szenario Suchen in Daten gehört zu den wichtigsten Operationen etwa Suchen nach: Stichworten in

Mehr

JAVA - Suchen - Sortieren

JAVA - Suchen - Sortieren Übungen Informatik I JAVA - Suchen - Sortieren http://www.fbi-lkt.fh-karlsruhe.de/lab/info01/tutorial Übungen Informatik 1 Folie 1 Inhalt Suchen/Sortieren binary search mergesort bubblesort Übungen Informatik

Mehr

Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen

Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen 186.172 Algorithmen und Datenstrukturen 1 VL 4.0 Übungsblatt 1 für die Übung

Mehr

Datenstrukturen Kurzanleitung

Datenstrukturen Kurzanleitung Datenstrukturen Kurzanleitung Insertionsort p = (7, 5, 4, 83, 6, 6) n = 6 Start: K ist sortierte Folge. Für i =, 3, 4,..., n: Füge ki in eine sortierte Folge ( k, k, k 3,..., k n ) in der richtigen Position

Mehr

Algorithmen und Datenstrukturen (Th. Ottmann und P. Widmayer) Folien: Suchverfahren Autor: Stefan Edelkamp / Sven Schuierer

Algorithmen und Datenstrukturen (Th. Ottmann und P. Widmayer) Folien: Suchverfahren Autor: Stefan Edelkamp / Sven Schuierer Algorithmen und Datenstrukturen (Th. Ottmann und P. Widmayer) Folien: Suchverfahren Autor: Stefan Edelkamp / Sven Schuierer Institut für Informatik Georges-Köhler-Allee Albert-Ludwigs-Universität Freiburg

Mehr

! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 -

! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 - ! 1. Rekursive Algorithmen! 2. Rekursive (dynamische) Datenstrukturen II.3.2 Rekursive Datenstrukturen - 1 - Ausdruck Ausdruck Grundwert ( Typ ) Präfix-Operator Name Methodenaufruf [ Ausdruck ] ( Ausdruck

Mehr

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK ECHNISCHE UNIVERSIÄ MÜNCHEN FAKULÄ FÜR INFORMAIK Lehrstuhl für Sprachen und Beschreibungsstrukturen WS 2007/2008 Praktikum Grundlagen der Programmierung Lösungsvorschläge zu Blatt 9 F. Forster,. Gawlitza,

Mehr

Tutoraufgabe 1 (Sortieren): Lösung: Datenstrukturen und Algorithmen SS14 Lösung - Übung 4

Tutoraufgabe 1 (Sortieren): Lösung: Datenstrukturen und Algorithmen SS14 Lösung - Übung 4 Prof. aa Dr. E. Ábrahám Datenstrukturen und Algorithmen SS Lösung - Übung F. Corzilius, S. Schupp, T. Ströder Tutoraufgabe (Sortieren): a) Sortieren Sie das folgende Array durch Anwendung des Selectionsort-Algorithmus.

Mehr

Grundlagen: Algorithmen und Datenstrukturen

Grundlagen: Algorithmen und Datenstrukturen Grundlagen: Algorithmen und Datenstrukturen Prof. Dr. Hanjo Täubig Lehrstuhl für Effiziente Algorithmen (Prof. Dr. Ernst W. Mayr) Institut für Informatik Technische Universität München Sommersemester 2010

Mehr

Algorithmen und Datenstrukturen 1 VL Übungstest WS November 2008

Algorithmen und Datenstrukturen 1 VL Übungstest WS November 2008 Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen 186.172 Algorithmen und Datenstrukturen 1 VL 4.0 1. Übungstest WS 2008 07. November

Mehr

Interne Sortierverfahren

Interne Sortierverfahren Angewandte Datentechnik Interne Sortierverfahren Interne Sortierverfahren Ausarbeitung einer Maturafrage aus dem Fach A n g e w a n d t e D a t e n t e c h n i k Andreas Hechenblaickner 5CDH HTBLA Kaindorf/Sulm

Mehr

1. Rekursive Algorithmen 2. Rekursive (dynamische) Datenstrukturen

1. Rekursive Algorithmen 2. Rekursive (dynamische) Datenstrukturen 1. Rekursive Algorithmen 2. Rekursive (dynamische) Datenstrukturen II.3.2 Rekursive Datenstrukturen - 1 - Grundwert ( Typ ) Präfix-Operator Name Methodenaufruf [ ] ( ) Infix-Operator Methodenaufruf new

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1 Kapitel 13 Listen Listen 1 Ziele Implementierungen für Listen kennenlernen Einfach verkettete und doppelt verkettete Listen verstehen Listen-Implementierungen in der Java-Bibliothek kennenlernen Durch

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1 Kapitel 12 Listen Listen 1 Ziele Implementierungen für Listen kennenlernen Einfach verkettete und doppelt verkettete Listen verstehen Listen-Implementierungen in der Java-Bibliothek kennenlernen Durch

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1 Kapitel 11 Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 2 Ziele Implementierungen für

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen A7. Sortieren III Marcel Lüthi and Gabriele Röger Universität Basel 14. März 2018 Untere Schranke Sortierverfahren Sortieren Vergleichsbasierte Verfahren Nicht vergleichsbasierte

Mehr

A7.1 Untere Schranke. Algorithmen und Datenstrukturen. A7.1 Untere Schranke. Algorithmen und Datenstrukturen. A7.2 Quicksort. A7.

A7.1 Untere Schranke. Algorithmen und Datenstrukturen. A7.1 Untere Schranke. Algorithmen und Datenstrukturen. A7.2 Quicksort. A7. Algorithmen und Datenstrukturen 14. März 2018 A7. III Algorithmen und Datenstrukturen A7. III Marcel Lüthi and Gabriele Röger Universität Basel 14. März 2018 A7.1 Untere Schranke A7.2 Quicksort A7.3 Heapsort

Mehr

Tutoraufgabe 1 (Sortieralgorithmus):

Tutoraufgabe 1 (Sortieralgorithmus): Prof. aa Dr. Ir. Joost-Pieter Katoen Datenstrukturen und Algorithmen SS Tutoriumslösung - Übung 4 (Abgabe 2..2) Christian Dehnert, Friedrich Gretz, Benjamin Kaminski, Thomas Ströder Tutoraufgabe (Sortieralgorithmus):

Mehr

Einführung Elementare Datenstrukturen. Der Konstruktor muß den Listenkopf head erzeugen. Der Vorgänger und Nachfolger von head ist head selbst.

Einführung Elementare Datenstrukturen. Der Konstruktor muß den Listenkopf head erzeugen. Der Vorgänger und Nachfolger von head ist head selbst. Einführung Elementare Datenstrukturen (Folie 38, Seite 23 im Skript) Der Konstruktor muß den Listenkopf head erzeugen. Der Vorgänger und Nachfolger von head ist head selbst. Einführung Elementare Datenstrukturen

Mehr

Übungsblatt 13. Abgabe / Besprechung in Absprache mit dem Tutor

Übungsblatt 13. Abgabe / Besprechung in Absprache mit dem Tutor Albert-Ludwigs-Universität Freiburg Institut für Informatik Einführung in die Informatik Sommersemester 2013 PD Dr. Cyrill Stachniss Dr. Rainer Kümmerle Übungsblatt 13 Abgabe / Besprechung in Absprache

Mehr

3.2. Divide-and-Conquer-Methoden

3.2. Divide-and-Conquer-Methoden LUDWIG- MAXIMILIANS- UNIVERSITY MUNICH DEPARTMENT INSTITUTE FOR INFORMATICS DATABASE 3.2. Divide-and-Conquer-Methoden Divide-and-Conquer-Methoden Einfache Sortieralgorithmen reduzieren die Größe des noch

Mehr

Algorithms & Data Structures 2

Algorithms & Data Structures 2 Algorithms & Data Structures Digital Sorting WS B. Anzengruber-Tanase (Institute for Pervasive Computing, JKU Linz) (Institute for Pervasive Computing, JKU Linz) WIEDERHOLUNG :: UNTERE SCHRANKE FÜR SORTIEREN

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen 1 Algorithmen und Datenstrukturen Wintersemester 017/18 8. Vorlesung Sortieren mit dem Würfel! Prof. Dr. Alexander Wolff Lehrstuhl für Informatik I - 5 Guten Morgen! Tipps für unseren ersten Test am Do,

Mehr

14. Sortieren II Heapsort. Heapsort. [Max-]Heap 7. Heapsort, Quicksort, Mergesort. Binärer Baum mit folgenden Eigenschaften

14. Sortieren II Heapsort. Heapsort. [Max-]Heap 7. Heapsort, Quicksort, Mergesort. Binärer Baum mit folgenden Eigenschaften Heapsort, Quicksort, Mergesort 14. Sortieren II 14.1 Heapsort [Ottman/Widmayer, Kap. 2.3, Cormen et al, Kap. 6] 397 398 Heapsort [Max-]Heap 7 Inspiration von Selectsort: Schnelles Einfügen Binärer Baum

Mehr

QuickSort ist ein Sortieralgorithmus, der auf der Idee des Teile & Beherrsche beruht, und das gegebene Array an Ort und Stelle (in place) sortiert

QuickSort ist ein Sortieralgorithmus, der auf der Idee des Teile & Beherrsche beruht, und das gegebene Array an Ort und Stelle (in place) sortiert 4.3.6 QuickSort QuickSort ist ein Sortieralgorithmus, der auf der Idee des Teile & Beherrsche beruht, und das gegebene Array an Ort und Stelle (in place) sortiert QuickSort teilt das gegebene Array anhand

Mehr

Probeklausur zur Vorlesung

Probeklausur zur Vorlesung Dr. Jochen Hoenicke Alexander Nutz Probeklausur zur Vorlesung Einführung in die Informatik Sommersemester 2014 Die Klausur besteht aus diesem Deckblatt und elf Blättern mit den Aufgaben, sowie einem Blatt

Mehr

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein (kmk@informatik.uni-kiel.

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein (kmk@informatik.uni-kiel. Java Crashkurs Kim-Manuel Klein (kmk@informatik.uni-kiel.de) May 7, 2015 Quellen und Editoren Internet Tutorial: z.b. http://www.java-tutorial.org Editoren Normaler Texteditor (Gedit, Scite oder ähnliche)

Mehr

(Digital) Sorting. October 25, Algorithms & Datastructures 2 Exercises WS 2016

(Digital) Sorting. October 25, Algorithms & Datastructures 2 Exercises WS 2016 (Digital) Sorting October 2, 2016 Algorithms & Datastructures 2 Exercises WS 2016 Dipl.-Ing. University Linz, Institute for Pervasive Computing Altenberger Straße 69, A-4040 Linz kurz@pervasive.jku.at

Mehr

Software Entwicklung 1

Software Entwicklung 1 Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter AG Softech FB Informatik TU Kaiserslautern Datenstruktur Liste Bieniusa/Poetzsch-Heffter Software Entwicklung 1 2/ 42 Formale Definition

Mehr

Grundlegende Sortieralgorithmen

Grundlegende Sortieralgorithmen Grundlegende Sortieralgorithmen Martin Wirsing in Zusammenarbeit mit Matthias Hölzl und Nora Koch Sortieren in Java Man kann Sortierverfahren in einem imperativem oder einem objektorientierten Stil programmieren.

Mehr

Sortierverfahren. Sortierverfahren für eindimensionale Arrays

Sortierverfahren. Sortierverfahren für eindimensionale Arrays Sortierverfahren Sortierverfahren Sortieren durch Einfügen Sortieren durch Auswählen Sortieren durch Vertauschen (Bubblesort) Quicksort Sortierverfahren für eindimensionale Arrays 1 Gegeben ist eine beliebige

Mehr

s(x, i) = i h 2 (x), i N 0

s(x, i) = i h 2 (x), i N 0 TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen SS 2009 Grundlagen: Algorithmen und Datenstrukturen Übungsblatt 5 Prof. Dr. Helmut Seidl, S. Pott,

Mehr

9. Rekursion. 1 falls n 1 n (n 1)!, andernfalls. Experiment: Die Türme von Hanoi. Links Mitte Rechts. Mathematische Rekursion

9. Rekursion. 1 falls n 1 n (n 1)!, andernfalls. Experiment: Die Türme von Hanoi. Links Mitte Rechts. Mathematische Rekursion Experiment: Die Türme von Hanoi. Rekursion Mathematische Rekursion, Terminierung, der Aufrufstapel, Beispiele, Rekursion vs. Iteration Links Mitte Rechts Mathematische Rekursion Viele mathematische Funktionen

Mehr

Algorithmen und Datenstrukturen 12

Algorithmen und Datenstrukturen 12 12. Juli 2012 1 Besprechung Blatt 11 Fragen 2 Binary Search Binäre Suche in Arrays Binäre Suchbäume (Binary Search Tree) 3 Sortierverfahren Allgemein Heapsort Bubblesort Insertionsort Mergesort Quicksort

Mehr

Heapsort, Quicksort, Mergesort. 8. Sortieren II

Heapsort, Quicksort, Mergesort. 8. Sortieren II 209 Heapsort, Quicksort, Mergesort 8. Sortieren II 210 8.1 Heapsort [Ottman/Widmayer, Kap. 2.3, Cormen et al, Kap. 6] Heapsort 211 Inspiration von Selectsort: Schnelles Einfügen Inspiration von Insertionsort:

Mehr

Übung Algorithmen und Datenstrukturen

Übung Algorithmen und Datenstrukturen Übung Algorithmen und Datenstrukturen Sommersemester 2017 Marc Bux, Humboldt-Universität zu Berlin Agenda 1. (Sortierte) Listen 2. Stacks & Queues 3. Datenstrukturen 4. Rekursion und vollständige Induktion

Mehr

2 Sortieren. Beispiel: Es seien n = 8 und a = i : a i : ϕ(i) : a ϕ(i) :

2 Sortieren. Beispiel: Es seien n = 8 und a = i : a i : ϕ(i) : a ϕ(i) : 2 Sortieren Das Sortieren einer Datenfolge ist eines der am leichtesten zu verstehenden und am häufigsten auftretenden algorithmischen Probleme. In seiner einfachsten Form besteht das Problem darin, eine

Mehr

Verkettete Datenstrukturen: Listen

Verkettete Datenstrukturen: Listen Verkettete Datenstrukturen: Listen 2 Listen Formal: Liste = endliche Folge von Elementen [a 1, a 2,..., a n ]. Spezialfall: leere Liste [ ]. Länge einer Liste = Anzahl der Elemente (bei leerer Liste: 0).

Mehr

ADT: Verkettete Listen

ADT: Verkettete Listen ADT: Verkettete Listen Motivation I public class Bruch{ int zaehler, nenner; public Bruch(int zaehler, int nenner) { this.zaehler= zaehler; this.nenner = nenner; Konstruktor zum Initialisieren der Werte

Mehr

Grundlegende Sortieralgorithmen

Grundlegende Sortieralgorithmen Grundlegende Sortieralgorithmen Martin Wirsing in Zusammenarbeit mit Michael Barth, Philipp Meier und Gefei Zhang 01/05 2 Ziele Grundlegende Sortieralgorithmen auf Reihungen kennen lernen 3 Klassifizierung

Mehr

Algorithmen I. Tutorium 1-3. Sitzung. Dennis Felsing

Algorithmen I. Tutorium 1-3. Sitzung. Dennis Felsing Algorithmen I Tutorium 1-3. Sitzung Dennis Felsing dennis.felsing@student.kit.edu www.stud.uni-karlsruhe.de/~ubcqr/algo 2011-05-02 Überblick 1 Sortieren und Suchen 2 Mastertheorem 3 Datenstrukturen 4 Kreativaufgabe

Mehr

Übung Algorithmen und Datenstrukturen

Übung Algorithmen und Datenstrukturen Übung Algorithmen und Datenstrukturen Sommersemester 2017 Patrick Schäfer, Humboldt-Universität zu Berlin Agenda 1. Sortierte Listen 2. Stacks & Queues 3. Teile und Herrsche Nächste Woche: Vorrechnen (first-come-first-served)

Mehr

8. Sortieren II. 8.1 Heapsort. Heapsort. [Max-]Heap 6. Heapsort, Quicksort, Mergesort. Binärer Baum mit folgenden Eigenschaften

8. Sortieren II. 8.1 Heapsort. Heapsort. [Max-]Heap 6. Heapsort, Quicksort, Mergesort. Binärer Baum mit folgenden Eigenschaften Heapsort, Quicksort, Mergesort 8. Sortieren II 8.1 Heapsort [Ottman/Widmayer, Kap. 2.3, Cormen et al, Kap. 6] 9 210 Heapsort [Max-]Heap 6 Inspiration von Selectsort: Schnelles Einfügen Binärer Baum mit

Mehr

Heapsort, Quicksort, Mergesort. 8. Sortieren II

Heapsort, Quicksort, Mergesort. 8. Sortieren II 209 Heapsort, Quicksort, Mergesort 8. Sortieren II 210 8.1 Heapsort [Ottman/Widmayer, Kap. 2.3, Cormen et al, Kap. 6] 211 Heapsort Inspiration von Selectsort: Schnelles Einfügen Inspiration von Insertionsort:

Mehr

Übersicht. Datenstrukturen und Algorithmen. Divide-and-Conquer. Übersicht. Vorlesung 9: Quicksort (K7)

Übersicht. Datenstrukturen und Algorithmen. Divide-and-Conquer. Übersicht. Vorlesung 9: Quicksort (K7) Datenstrukturen und Algorithmen Vorlesung 9: (K7) Joost-Pieter Katoen Algorithmus Lehrstuhl für Informatik 2 Software Modeling and Verification Group http://moves.rwth-aachen.de/teaching/ss-5/dsal/ 2 7.

Mehr

7. Verkettete Strukturen: Listen

7. Verkettete Strukturen: Listen 7. Verkettete Strukturen: Listen Java-Beispiele: IntList.java List.java Stack1.java Version: 4. Jan. 2016 Vergleich: Schwerpunkte Arrays verkettete Listen Listenarten Implementation: - Pascal (C, C++):

Mehr

Grundlegende Sortieralgorithmen

Grundlegende Sortieralgorithmen Grundlegende Sortieralgorithmen Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang http://www.dbs.ifi.lmu.de/lehre/nfinfosw WS 07/08 2 Ziele Grundlegende Sortieralgorithmen auf Reihungen kennen

Mehr

Übung Algorithmen I

Übung Algorithmen I Übung Algorithmen I 20.5.15 Christoph Striecks Christoph.Striecks@kit.edu (Mit Folien von Julian Arz, Timo Bingmann und Sebastian Schlag.) Roadmap Organisation Mergesort, Quicksort Dual Pivot Quicksort

Mehr

ALP II Dynamische Datenmengen

ALP II Dynamische Datenmengen ALP II Dynamische Datenmengen Teil III Iteratoren Iterator-Objekt O1 O2 O3 O4 SS 2012 Prof. Dr. Margarita Esponda 22. ALP2-Vorlesung, M. Esponda 2 Motivation: Iteratoren Wir haben für die Implementierung

Mehr

2. Einfache Suchverfahren

2. Einfache Suchverfahren Lineare Listen Sequentielle Suche Binäre Suche. Einfache Suchverfahren Weitere Suchverfahren auf sortierten Feldern - Fibonacci-Suche - Sprungsuche - Exponentielle Suche - Interpolationssuche Auswahlproblem

Mehr

Schwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen

Schwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen Schwerpunkte 7. Verkettete Strukturen: Listen Java-Beispiele: IntList.java List.java Stack1.java Vergleich: Arrays verkettete Listen Listenarten Implementation: - Pascal (C, C++): über Datenstrukturen

Mehr

Übung: Algorithmen und Datenstrukturen SS 2007

Übung: Algorithmen und Datenstrukturen SS 2007 Übung: Algorithmen und Datenstrukturen SS 2007 Prof. Lengauer Sven Apel, Michael Claÿen, Christoph Zengler, Christof König Blatt 5 Votierung in der Woche vom 04.06.0708.06.07 Aufgabe 12 Manuelle Sortierung

Mehr

Algorithmen und Datenstrukturen (Th. Ottmann und P. Widmayer) Folien: Spezielle Sortierverfahren Autor: Sven Schuierer

Algorithmen und Datenstrukturen (Th. Ottmann und P. Widmayer) Folien: Spezielle Sortierverfahren Autor: Sven Schuierer Algorithmen und Datenstrukturen (Th. Ottmann und P. Widmayer) Folien: Spezielle Sortierverfahren Autor: Sven Schuierer Institut für Informatik Georges-Köhler-Allee Albert-Ludwigs-Universität Freiburg 1

Mehr

Abstrakter Datentyp (ADT): Besteht aus einer Menge von Objekten, sowie Operationen, die auf diesen Objekten wirken.

Abstrakter Datentyp (ADT): Besteht aus einer Menge von Objekten, sowie Operationen, die auf diesen Objekten wirken. Abstrakte Datentypen und Datenstrukturen/ Einfache Beispiele Abstrakter Datentyp (ADT): Besteht aus einer Menge von Objekten, sowie Operationen, die auf diesen Objekten wirken. Datenstruktur (DS): Realisierung

Mehr

Algorithmen und Programmierung III

Algorithmen und Programmierung III Musterlösung zum 3. Aufgabenblatt zur Vorlesung WS 2006 Algorithmen und Programmierung III von Christian Grümme Aufgabe 1 Potenzieren von Matrizen Testlauf der Klasse Matrix.java: 10 Punkte Erzeuge Matrix

Mehr

ADT: Verkettete Listen

ADT: Verkettete Listen ADT: Verkettete Listen Abstrakter typ - Definition public class Bruch int zaehler, nenner; public Bruch(int zaehler, int nenner) this.zaehler = zaehler; this.nenner = nenner; Konstruktor zum Initialisieren

Mehr

In C und Java müssen Variablen und Methodenergebnisse durch Typangaben erläutert werden. Welche der folgenden Aussagen sind korrekt und welche nicht:

In C und Java müssen Variablen und Methodenergebnisse durch Typangaben erläutert werden. Welche der folgenden Aussagen sind korrekt und welche nicht: Typprüfung (Compiler / Laufzeit) In C und Java müssen Variablen und Methodenergebnisse durch Typangaben erläutert werden. Welche der folgenden Aussagen sind korrekt und welche nicht: 1) Der Compiler prüft

Mehr

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen Heap vs. vs. statisch Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen

Mehr

6 Algorithmen und Datenstrukturen

6 Algorithmen und Datenstrukturen 84 tion in der Lage sein, aus einem Bereich solcher Buchwerte nur die Titel auszuwählen. Das folgende Beispiel veranschaulicht die Verwendung dieser Funktion: struct book int id; std::string title; std::string

Mehr

Abschnitt: Algorithmendesign und Laufzeitanalyse

Abschnitt: Algorithmendesign und Laufzeitanalyse Abschnitt: Algorithmendesign und Laufzeitanalyse Definition Divide-and-Conquer Paradigma Divide-and-Conquer Algorithmen verwenden die Strategien 1 Divide: Teile das Problem rekursiv in Subproblem gleicher

Mehr

Suchen und Sortieren

Suchen und Sortieren Suchen und Sortieren Suchen Sortieren Mischen Zeitmessungen Bewertung von Sortier-Verfahren Seite 1 Suchverfahren Begriffe Suchen = Bestimmen der Position (Adresse) eines Wertes in einer Datenfolge Sequentielles

Mehr

Übungsblatt 13. Abgabe / Besprechung in Absprache mit dem Tutor

Übungsblatt 13. Abgabe / Besprechung in Absprache mit dem Tutor Albert-Ludwigs-Universität Freiburg Institut für Informatik Einführung in die Informatik Sommersemester 2018 Prof. Dr. Wolfram Burgard Andreas Kuhner Daniel Büscher Übungsblatt 13 Abgabe / Besprechung

Mehr

Tutoraufgabe 1 (Fibonacci-Zahlen):

Tutoraufgabe 1 (Fibonacci-Zahlen): Prof. aa Dr. J. Giesl Programmierung WS12/13 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder Tutoraufgabe 1 (Fibonacci-Zahlen): Die Folge der Fibonacci-Zahlen ist folgendermaßen definiert: F 0 = 0 F 1 =

Mehr

Kapitel 6 Elementare Sortieralgorithmen

Kapitel 6 Elementare Sortieralgorithmen Kapitel 6 Elementare Sortieralgorithmen Ziel: Kennenlernen elementarer Sortierverfahren und deren Effizienz Zur Erinnerung: Das Sortier-Problem Gegeben: Folge A von n Elementen a 1, a 2,..., a n ; Eine

Mehr

Einführung in die Informatik

Einführung in die Informatik Einführung in die Informatik Jochen Hoenicke Software Engineering Albert-Ludwigs-University Freiburg Sommersemester 2014 Jochen Hoenicke (Software Engineering) Einführung in die Informatik Sommersemester

Mehr

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen Heap vs. vs. statisch Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen

Mehr

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Vorlesung Informatik 2 Algorithmen und Datenstrukturen Vorlesung Informatik 2 Algorithmen und Datenstrukturen (13 Offenes Hashing) Prof. Dr. Susanne Albers Hashing: Allgemeiner Rahmen Schlüsselmenge S Universum U aller möglichen Schlüssel Hashfunktion h 0,,m-1

Mehr

Name: Seite 1. Beantworten Sie die Fragen in den Aufgaben 1 und 2 mit einer kurzen, prägnanten Antwort.

Name: Seite 1. Beantworten Sie die Fragen in den Aufgaben 1 und 2 mit einer kurzen, prägnanten Antwort. Name: Seite 1 Beantworten Sie die Fragen in den Aufgaben 1 und 2 mit einer kurzen, prägnanten Antwort. Aufgabe 1 (8 Punkte) 1. Wie wird bei der Zusicherungsmethode die Zusicherung genannt, die vor Eintritt

Mehr

Prof. H. Herbstreith Fachbereich Informatik. Leistungsnachweis. Informatik 1 WS 2001/2002

Prof. H. Herbstreith Fachbereich Informatik. Leistungsnachweis. Informatik 1 WS 2001/2002 Prof. H. Herbstreith 30.01.2002 Fachbereich Informatik Leistungsnachweis Informatik 1 WS 2001/2002 Bearbeitungszeit 120 Minuten. Keine Hilfsmittel erlaubt. Aufgabe 1: 20 Punkte Vervollständigen Sie folgende

Mehr

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen SS 2011 Einführung in die rmatik I Übungsblatt 8 Prof. Dr. Helmut Seidl, A. Lehmann, A. Herz, Dr.

Mehr

Übung Algorithmen und Datenstrukturen

Übung Algorithmen und Datenstrukturen Übung Algorithmen und Datenstrukturen Sommersemester 2017 Patrick Schäfer, Humboldt-Universität zu Berlin Agenda: Sortierverfahren 1. Schreibtischtest 2. Stabilität 3. Sortierung spezieller Arrays 4. Untere

Mehr

4. Algorithmen und Datenstrukturen I Grundlagen der Programmierung 1 (Java)

4. Algorithmen und Datenstrukturen I Grundlagen der Programmierung 1 (Java) 4. Algorithmen und Datenstrukturen I Grundlagen der Programmierung 1 (Java) Fachhochschule Darmstadt Haardtring 100 D-64295 Darmstadt Prof. Dr. Bernhard Humm FH Darmstadt, 8./15. November 2005 Einordnung

Mehr

ADT: Verkettete Listen

ADT: Verkettete Listen ADT: Verkettete Listen Abstrakter typ - Definition public class Bruch{ int zaehler, nenner; public Bruch(int zaehler, int nenner) { this.zaehler = zaehler; this.nenner = nenner; Konstruktor zum Initialisieren

Mehr

Informatik II, SS 2014

Informatik II, SS 2014 Informatik II SS 2014 (Algorithmen & Datenstrukturen) Vorlesung 6 (14.5.2014) Abstrakte Datentypen, Einfache Datenstrukturen Algorithmen und Komplexität Abstrakte Datentypen : Beispiele Dictionary: (auch:

Mehr

Name: Seite 2. Beantworten Sie die Fragen in den Aufgaben 1 und 2 mit einer kurzen, prägnanten Antwort.

Name: Seite 2. Beantworten Sie die Fragen in den Aufgaben 1 und 2 mit einer kurzen, prägnanten Antwort. Name: Seite 2 Beantworten Sie die Fragen in den Aufgaben 1 und 2 mit einer kurzen, prägnanten Antwort. Aufgabe 1 (8 Punkte) 1. Wie sieht -5 in der 4Bit 2-er Komplementdarstellung aus? 2. Berechnen Sie

Mehr

Kapitel 2. Weitere Beispiele Effizienter Algorithmen

Kapitel 2. Weitere Beispiele Effizienter Algorithmen Kapitel 2 Weitere Beispiele Effizienter Algorithmen Sequentielle Suche Gegeben: Array a[1..n] Suche in a nach Element x Ohne weitere Zusatzinformationen: Sequentielle Suche a[1] a[2] a[3] Laufzeit: n Schritte

Mehr

Aufgabenblatt: Arrays

Aufgabenblatt: Arrays Aufgabenblatt: Arrays - Seite 1 Aufgabenblatt: Arrays (1.) (a.) Erstellen Sie eine Methode, die in einem Array von Zahlen nach einem bestimmten Wert sucht! static int LinearSearch(int searchvalue, int

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen 11. Übung Verkettete Listen, Sortieren Insertionsort, Mergesort, Radixsort, Quicksort Clemens Lang Übungen zu AuD 19. Januar 2010 Clemens Lang (Übungen zu AuD) Algorithmen

Mehr

Abgabe: (vor der Vorlesung) Aufgabe 3.1 (P) Master-Theorem

Abgabe: (vor der Vorlesung) Aufgabe 3.1 (P) Master-Theorem TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen SS 2009 Grundlagen: Algorithmen und Datenstrukturen Übungsblatt 3 Prof. Dr. Helmut Seidl, S. Pott,

Mehr

Proseminar Effiziente Algorithmen

Proseminar Effiziente Algorithmen Proseminar Effiziente Algorithmen Kapitel 4: Sortieren, Selektieren und Suchen Prof. Dr. Christian Scheideler WS 2017 Übersicht Sortieren Selektieren Suchen 08.11.2017 Proseminar EA 2 Sortierproblem 5

Mehr

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen 1 Kapitel 9 Komplexität von Algorithmen und Sortieralgorithmen Ziele 2 Komplexität von Algorithmen bestimmen können (in Bezug auf Laufzeit und auf Speicherplatzbedarf) Sortieralgorithmen kennenlernen:

Mehr

Software Entwicklung 1

Software Entwicklung 1 Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter AG Softech FB Informatik TU Kaiserslautern Überblick Parametrisierte Datentypen mit Java Generics Java Collections Framework Parametrisierte

Mehr

13. Dynamische Datenstrukturen

13. Dynamische Datenstrukturen Motivation: Stapel. Dynamische Datenstrukturen Verkettete Listen, Abstrakte Datentypen Stapel, Warteschlange, Sortierte Liste 40 40 Motivation: Stapel ( push, pop, top, empty ) Wir brauchen einen neuen

Mehr

Kapitel 10. Komplexität von Algorithmen und Sortieralgorithmen

Kapitel 10. Komplexität von Algorithmen und Sortieralgorithmen Kapitel 10 Komplexität von Algorithmen und Sortieralgorithmen Arrays 1 Ziele Komplexität von Algorithmen bestimmen können (in Bezug auf Laufzeit und auf Speicherplatzbedarf) Sortieralgorithmen kennenlernen:

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen 1 Algorithmen und Datenstrukturen Wintersemester 2016/17 11. Vorlesung Elementare Datenstrukturen: Stapel + Schlange + Liste Prof. Dr. Alexander Wolff Lehrstuhl für Informatik I 2-4 Zur Erinnerung Datenstruktur:

Mehr

Praktikum Algorithmische Anwendungen WS 2006/07 Sortieren in linearer Laufzeit

Praktikum Algorithmische Anwendungen WS 2006/07 Sortieren in linearer Laufzeit Praktikum Algorithmische Anwendungen WS 2006/07 Sortieren in linearer Laufzeit Team A blau Martin Herfurth 11043831 Markus Wagner 11043447 5. Februar 2007 1 1 Untere Schranke für Vergleichsbasierte Algorithmen

Mehr

Algorithmen und Datenstrukturen (Th. Ottmann und P. Widmayer) Folien: Einfache Sortierverfahren Autor: Stefan Edelkamp

Algorithmen und Datenstrukturen (Th. Ottmann und P. Widmayer) Folien: Einfache Sortierverfahren Autor: Stefan Edelkamp Algorithmen und Datenstrukturen (Th. Ottmann und P. Widmayer) Folien: Einfache Sortierverfahren Autor: Stefan Edelkamp Institut für Informatik Georges-Köhler-Allee Albert-Ludwigs-Universität Freiburg 1

Mehr

Programmierung für Mathematik HS11

Programmierung für Mathematik HS11 software evolution & architecture lab Programmierung für Mathematik HS11 Übung 8 1 Aufgabe: Codeverständnis (Repetition) 1.1 Lernziele 1. Code verstehen können. 2. Fehler im Code finden und korrigieren

Mehr

Die Schnittstelle Comparable

Die Schnittstelle Comparable Die Schnittstelle Comparable Wir wollen Such- und Sortieroperationen für beliebige Objekte definieren. Dazu verwenden wir die vordefinierte Schnittstelle Comparable: public interface Comparable { int compareto(object

Mehr

Sortieralgorithmen. Inhalt: InsertionSort BubbleSort QuickSort. Marco Block

Sortieralgorithmen. Inhalt: InsertionSort BubbleSort QuickSort. Marco Block Inhalt: InsertionSort BubbleSort QuickSort Block M.: "Java-Intensivkurs - In 14 Tagen lernen Projekte erfolgreich zu realisieren", Springer-Verlag 2007 InsertionSort I Das Problem unsortierte Daten in

Mehr