Fortgeschrittene Algorithmen und Programmierung in C
Vorlesung 13 | HTW Berlin | WiSe 2025/26
& | Adresse von ("Adress-of") |
* | Wert an Adresse ("Dereferenzierung") |
Speicherbild:
x (0x1000): 42
ptr: 0x1000 → zeigt auf x
Klausurtipp: *ptr = Wert an der Adresse, &x = Adresse von x
arr[i] = *(arr + i)
Array-Name ist Zeiger auf erstes Element!
Bei int-Array: ptr+1 springt 4 Bytes (sizeof(int))
name: "Anna"
alter: 23
strcpy() für Strings!
Nicht: p1.name = "Anna";
| Variable: | p1.alter | Punkt |
| Zeiger: | ptr->alter | Pfeil |
ptr->x = (*ptr).x
Klausurtipp: Bei Funktionen mit struct Person *p immer Pfeil-Operator!
Original bleibt unverändert
Original wird geändert
Ohne Basisfall: Endlose Rekursion → Stack Overflow!
Finde kleinstes, tausche an Anfang
Füge an richtiger Stelle ein
Benachbarte vergleichen & tauschen
Alle drei: O(n²) Zeitkomplexität - Langsam bei großen Arrays!
Array muss sortiert sein!
O(log n) - viel schneller als lineare Suche O(n)
Bei 1.000.000 Elementen: max. 20 Vergleiche!
| Notation | Name | Beispiel | n=1000 |
|---|---|---|---|
| O(1) | Konstant | Array-Zugriff arr[5] | 1 |
| O(log n) | Logarithmisch | Binäre Suche | ~10 |
| O(n) | Linear | Lineare Suche, Summe | 1.000 |
| O(n²) | Quadratisch | Bubble Sort, Selection Sort | 1.000.000 |
Klausurtipp: Zählen Sie verschachtelte Schleifen! 1 Schleife = O(n), 2 verschachtelt = O(n²)
ptr.x& vergessen bei Call by Referencestrcpy vergessen bei Stringsstruct vergessen vor Typnameptr->xaendere(&var);if (n <= 1) return 1;strcpy(p.name, "Text");struct Person p;void f(int arr[], int n)struct davorLineare Suche
Binäre Suche
Bubble Sort
if (ptr != NULL) { *ptr = 10; }
int *ptr = arr;
ptr++; // Zeigt auf arr[1]
ptr += 2; // Zeigt auf arr[3]
int size = sizeof(arr) / sizeof(arr[0]);
// size = 4
⚠️ Läuft immer O(n²), auch wenn sortiert!
✅ Best Case: O(n) bei sortiertem Array!
| Algorithmus | Best Case | Average Case | Worst Case | Speicher | Stabil? |
|---|---|---|---|---|---|
| Selection Sort | O(n²) | O(n²) | O(n²) | O(1) | ❌ |
| Insertion Sort | O(n) | O(n²) | O(n²) | O(1) | ✅ |
| Bubble Sort | O(n) | O(n²) | O(n²) | O(1) | ✅ |
| Binäre Suche | O(1) | O(log n) | O(log n) | O(1) | - |
| Lineare Suche | O(1) | O(n) | O(n) | O(1) | - |
Klausurtermin: 5. Februar 2026
Bei Fragen: Moodle oder Sprechstunde
Fortgeschrittene Algorithmen und Programmierung
HTW Berlin | WiSe 2025/26