Sie sind auf Seite 1von 87

Algorithmen, Pseudocode, Sortieren

Manfred Hauswirth | Open Distributed Systems | Einführung in die Programmierung, WS 21/22


Was ist Informatik?

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 2
Vorwort
• Informatik ist ein Kunstwort aus
- Information und Automatik
- Information und Mathematik

• Informatik hat viele Facetten

• Einige definieren Informatik darüber, was Informatiker machen


- Viele, viele Bereiche
- Von Büro, Maschinenhalle, Unterhaltungsbranche, …

• Informatik bedeutet für viele etwas anderes, …

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 3
Informatik / Computer Science?
• Marvin Minsky: “Computer science has such intimate relations with
so many other subjects that it is hard to see it as a thing in itself.”

Quelle: Wikipedia

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 4
Informatik / Computer Science?
• Marvin Minsky: “Computer science has such intimate relations with
so many other subjects that it is hard to see it as a thing in itself.”

Quelle: Wikipedia

• Juris Hartmanis: “Computer science differs from the known


sciences so deeply that it has to be viewed as a new species
among the sciences.”
Quelle: Wikipedia

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 4
Informatik / Computer Science?
• Donald Knuth: “The ‘study’ of algorithms”

Quelle: Wikipedia

- Algorithms ≈ what you can teach a computer


- Which functions can be efficiently computed?
- Need a computer to find out!

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 5
Informatik / Computer Science?
• Donald Knuth: “The ‘study’ of algorithms”

Quelle: Wikipedia

- Algorithms ≈ what you can teach a computer


- Which functions can be efficiently computed?
- Need a computer to find out!

• Juris Hartmanis: “Study of information”


- How to represent information
- How to process information
- And the machines that do this

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 5
Informatik / Computer Science?
• Fred Brooks:

Quelle: Wikipedia

- “CS ≠ science”
- “CS = engineering”
- Concerned with “making”: Physical computers, S/W systems

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 6
Informatik / Computer Science?
• Peter Denning: “Computing is a 4th great domain of science
alongside the physical, life, and social sciences.”

Quelle: Wikipedia

• Informatik =
- discovery (science)
- implementation (engineering)
of information processes

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 7
Algorithmik:
Ein wesentlicher Teil
der Informatik

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 8
Denkanstoß

• Eierfall-Problem:
Gegeben: Hochhaus mit 100
Stockwerken und
zwei Eier
Gesucht: Das höchste Stockwerk
aus dem man ein Ei
fallen lassen kann, so
dass es nicht zerbricht
• Wie???

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 9
Denkanstoß

• Eierfall-Problem:
Gegeben: Hochhaus mit 100
Stockwerken und
zwei Eier
Gesucht: Das höchste Stockwerk
aus dem man ein Ei
fallen lassen kann, so
dass es nicht zerbricht
• Wie???
Øhttp://datagenetics.com/blog/july22012/
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 9
Denkanstoß
• Frage aus „technischen Bewerbungsgesprächen“ für Software-
Engineering-Positionen

• Siehe auch:

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 10
Warum solche Fragen?

• Algorithmisches Denken ist die Grundlage der Informatik

• Algorithmen und Datenstrukturen findet man überall in der


Informatik wieder

• In dieser Vorlesung
- Basis-Datenstrukturen
- Basis-Algorithmen

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 11
Themengebiete in der Informatik
• Datenbanken

• Kommunikation

• Graphik

• Robotik

• Künstliche Intelligenz

• …

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 12
Algorithmen

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 13
Programm vs. Algorithmus
• Algorithmen beschreiben, was die Computer ausführen sollen in
prinzipiellen Elementen

• Programmiersprachen stellen eine Schnittstelle da, um die


Algorithmen auf dem Computer definieren und ausführen zu
können

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 14
Programm vs. Algorithmus (2)
• Algorithmen fokussieren auf Korrektheit, Vollständigkeit, und
Komplexität

• Programmiersprachen müssen zusätzlich alle Details des


Computers berücksichtigen

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 15
Beispiel: Zweier-Potenzen
• Berechne die Zweier-Potenzen bis n:
m ¬ 0;
p ¬ 1;
while (p < n)
Ausgabe von: „2^m ist p“;
m ¬ m + 1;
p ¬ p * 2;

• Der Algorithmus ist in Pseudocode beschrieben!

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 16
Algorithmus
• Ein Algorithmus ist eine Liste von Anweisungen, die vom
Computer ausgeführt werden müssen, um eine bestimmte
Funktionalität zu erreichen
- „die Essenz eines Programms“

• Wichtige Aspekte:
- Korrektheit: Erfüllt der Algorithmus seine Anforderungen?
- Effizienz: Wie viel Zeit und wie viel Speicherplatz braucht er?
- Terminierung: Hält der Algorithmus immer an?

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 17
Grundlagen der
Algorithmenanalyse

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 18
Grundlagen der Algorithmen-Analyse
Inhalt
• Wie beschreibt man einen Algorithmus?
• Rechenmodell
• Laufzeitanalyse
• Wie beweist man die Korrektheit eines Algorithmus?

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 19
Wie beschreibt man einen Algorithmus?

Spiel: einen Algorithmus praktisch ausprobieren.

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 20
Wie beschreibt man einen Algorithmus?
Problemstellung
• Menschen wollen über Algorithmen reden, sie beschreiben
• Vergleichen von Algorithmen
• Programmiersprachen benötigen oft viel Code für „nichts“
• Kern des Algorithmus dann oft nicht mehr erkennbar
• Exakter Prosatext ist ebenfalls zu lang

Gesucht: Exakte, kompakte, einfache „Notation“

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 21
Pseudocode
• Beschreibungssprache ähnlich wie Java, C, Pascal, etc…
• Losgelöst von spezifischer Programmiersprache/Umgebung
• Manchmal kann auch ein vollständiger Satz die beste Beschreibung sein
• Wir ignorieren dabei Details, wie
- Variablen-Deklaration
- Include-Files, …
• Wir ignorieren dabei Software-Engineering-Aspekte wie
- Modularität
- Fehlerbehandlung, …

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 22
Pseudocode: Beispiel
AlgorithmFoo(Array A)
1. for j ¬ 2 to length(A) do
2. key ¬ A[j] Beschreibung des
3. i ¬ j-1 Algorithmus in
Pseudocode
4. while i>0 and A[i]>key do (kein C, Java, etc.)
5. A[i+1] ¬ A[i]
6. i ¬ i-1
7. A[i+1] ¬ key

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 23
Pseudocode
AlgorithmFoo(Array A)
1. for j ¬ 2 to length(A) do
2. key ¬ A[j]
Beschreibung des
3. i ¬ j-1 Algorithmus in
4. while i>0 and A[i]>key do Pseudocode
(kein C, Java, etc.)
5. A[i+1] ¬ A[i]
6. i ¬ i-1
7. A[i+1] ¬ key

Pseudocode
• Schleifen (for, while, repeat)

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 24
Pseudocode
AlgorithmFoo(Array A)
1. for j ¬ 2 to length(A) do
2. key ¬ A[j]
Beschreibung des
3. i ¬ j-1 Algorithmus in
4. while i>0 and A[i]>key do Pseudocode
(kein C, Java, etc.)
5. A[i+1] ¬ A[i]
6. i ¬ i-1
7. A[i+1] ¬ key

Pseudocode
• Zuweisungen durch ¬

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 25
Pseudocode
AlgorithmFoo(Array A)
1. for j ¬ 2 to length(A) do
2. key ¬ A[j]
Beschreibung des
3. i ¬ j-1 Algorithmus in
4. while i>0 and A[i]>key do Pseudocode
(kein C, Java, etc.)
5. A[i+1] ¬ A[i]
6. i ¬ i-1
7. A[i+1] ¬ key

Pseudocode
• Variablen (z.B. i, j, key) sind lokal definiert

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 26
Pseudocode
AlgorithmFoo(Array A)
1. for j ¬ 2 to length(A) do
2. key ¬ A[j]
Beschreibung des
3. i ¬ j-1 Algorithmus in
4. while i>0 and A[i]>key do Pseudocode
(kein C, Java, etc.)
5. A[i+1] ¬ A[i]
6. i ¬ i-1
7. A[i+1] ¬ key

Pseudocode
• Keine Typdeklaration, wenn Typ aus dem Kontext klar

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 27
Pseudocode
AlgorithmFoo(Array A)
1. for j ¬ 2 to length(A) do
2. key ¬ A[j]
Beschreibung des
3. i ¬ j-1 Algorithmus in
4. while i>0 and A[i]>key do Pseudocode
(kein C, Java, etc.)
5. A[i+1] ¬ A[i]
6. i ¬ i-1
7. A[i+1] ¬ key

Pseudocode
• Auch komplexere Datenstrukturen möglich, z.B. Array

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 28
Pseudocode
AlgorithmFoo(Array A)
1. for j ¬ 2 to length(A) do
2. key ¬ A[j]
3. i ¬ j-1 Beschreibung des
Algorithmus in
4. while i>0 and A[i]>key do
Pseudocode
5. A[i+1] ¬ A[i] (kein C, Java, etc.)
6. i ¬ i-1
7. A[i+1] ¬ key

Pseudocode
• Zugriff auf Feldelemente eines Arrays mit [ ]: z.B: A[1], A[i], A[i + 1], …
• Indizierung beginnt mit 1!

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 29
Pseudocode
AlgorithmFoo(Array A)
1. for j ¬ 2 to length(A) do
2. key ¬ A[j]
3. i ¬ j-1 Beschreibung des
Algorithmus in
4. while i>0 and A[i]>key do
Pseudocode
5. A[i+1] ¬ A[i] (kein C, Java, etc.)
6. i ¬ i-1
7. A[i+1] ¬ key

Pseudocode
• Datenstrukturen/Objekte können weitere Eigenschaften haben,
z.B: Arrays haben Längen
• Zugriff über Funktionen, z.B. Funktion length(A) gibt Länge des Arrays A zurück

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 30
Pseudocode
AlgorithmFoo(Array A)
1. for j ¬ 2 to length(A) do
2. key ¬ A[j]
3. i ¬ j-1 Beschreibung des
Algorithmus in
4. while i>0 and A[i]>key do
Pseudocode
5. A[i+1] ¬ A[i] (kein C, Java, etc.)
6. i ¬ i-1
7. A[i+1] ¬ key

Pseudocode
• Blockstruktur durch Einrücken, d.h. Klammern nicht unbedingt
benötigt!

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 31
Pseudocode
AlgorithmFoo(Array A)
1. for j ¬ 2 to length(A) do
2. key ¬ A[j]
3. i ¬ j-1 Beschreibung des
Algorithmus in
4. while i>0 and A[i]>key do
Pseudocode
5. A[i+1] ¬ A[i] (kein C, Java, etc.)
6. i ¬ i-1
7. A[i+1] ¬ key

Pseudocode
• Bedingte Verzweigungen (if then else)

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 32
Pseudocode
AlgorithmFoo(Array A)
1. for j ¬ 2 to length(A) do
2. key ¬ A[j]
3. i ¬ j-1 Beschreibung des
Algorithmus in
4. while i>0 and A[i]>key do
Pseudocode
5. A[i+1] ¬ A[i] (kein C, Java, etc.)
6. i ¬ i-1
7. A[i+1] ¬ key

Pseudocode
• Bedingte Verzweigungen (if then else)
• if summe > 9000 then
print “over ninethousand“
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 33
Pseudocode
AlgorithmFoo(Array A)
1. for j ¬ 2 to length(A) do
2. key ¬ A[j]
3. i ¬ j-1 Beschreibung des
Algorithmus in
4. while i>0 and A[i]>key do Pseudocode
5. A[i+1] ¬ A[i] (kein C, Java, etc.)
6. i ¬ i-1
7. A[i+1] ¬ key

Pseudocode
• Funktionen „call-by-value“: jede aufgerufene Funktion erhält neue Kopie der
übergebenen Variable, d.h. lokale Änderungen sind nicht global sichtbar
• Bei Objekten wird der Zeiger kopiert, lokale Änderungen am Objekt global
sichtbar
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 34
Pseudocode
AlgorithmFoo(Array A)
1. for j ¬ 2 to length(A) do
2. key ¬ A[j]
Beschreibung des
3. i ¬ j-1 Algorithmus in
4. while i>0 and A[i]>key do Pseudocode
(kein C, Java, etc.)
5. A[i+1] ¬ A[i]
6. i ¬ i-1
7. A[i+1] ¬ key

Pseudocode
• Rückgabe von Werten durch return

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 35
Pseudocode
AlgorithmFoo(Array A)
1. for j ¬ 2 to length(A) do
2. key ¬ A[j]
Beschreibung des
3. i ¬ j-1 Algorithmus in
4. while i>0 and A[i]>key do Pseudocode
(kein C, Java, etc.)
5. A[i+1] ¬ A[i]
6. i ¬ i-1
7. A[i+1] ¬ key

Pseudocode
• Kommentare durch Ø, oder //

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 36
Pseudocode in Jobinterviews
Quelle: http://xkcd.com/1185/

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 37
Beispiel: Sortieren

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 38
Sortieren
Problem: Sortieren
• Eingabe: Folge von n Zahlen (a1,…,an)
• Ausgabe: Permutation (a‘1,…,a‘n) von (a1,…,an), so dass a‘1 £ a‘2
£ … £ a‘n

Beispiel:
• Eingabe: 15, 7, 3, 18, 8, 4
• Ausgabe: 3, 4, 7, 8, 15, 18

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 39
Insertion Sort
InsertionSort(Array A)
1. for j ¬ 2 to length(A) do
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do
5. A[i+1] ¬ A[i]
6. i ¬ i-1
7. A[i+1] ¬ key
Idee InsertionSort
• Die ersten j-1 Elemente sind sortiert (zu Beginn j=2)
• Innerhalb eines Schleifendurchlaufs wird das j-te Element in die sortierte Folge eingefügt
• Am Ende ist die gesamte Folge sortiert

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 41
Insertion Sort
InsertionSort(Array A)
1. for j ¬ 2 to length(A) do
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do
5. A[i+1] ¬ A[i]
6. i ¬ i-1
7. A[i+1] ¬ key
Beispiel

8 15 3 14 7 6 18 19

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 42
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do
5. A[i+1] ¬ A[i]
6. i ¬ i-1
7. A[i+1] ¬ key

8 15 3 14 7 6 18 19

1 j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 43
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do
5. A[i+1] ¬ A[i]
6. i ¬ i-1
7. A[i+1] ¬ key
key

8 15 3 14 7 6 18 19

1 j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 44
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do
5. A[i+1] ¬ A[i]
6. i ¬ i-1
7. A[i+1] ¬ key
key

8 15 3 14 7 6 18 19

1 j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 45
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do
5. A[i+1] ¬ A[i]
6. i ¬ i-1
7. A[i+1] ¬ key
key

8 15 3 14 7 6 18 19

1 j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 46
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do
5. A[i+1] ¬ A[i]
6. i ¬ i-1
7. A[i+1] ¬ key
key

8 15 3 14 7 6 18 19

1 j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 47
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do
5. A[i+1] ¬ A[i]
6. i ¬ i-1
7. A[i+1] ¬ key
key

8 15 3 14 7 6 18 19

1 j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 48
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do
5. A[i+1] ¬ A[i]
6. i ¬ i-1
7. A[i+1] ¬ key

8 15 3 14 7 6 18 19

1 j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 49
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do
5. A[i+1] ¬ A[i]
6. i ¬ i-1
7. A[i+1] ¬ key
key

8 15 3 14 7 6 18 19

1 j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 50
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do
5. A[i+1] ¬ A[i]
6. i ¬ i-1
7. A[i+1] ¬ key
key=3

8 15 3 14 7 6 18 19

1 i j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 51
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do
5. A[i+1] ¬ A[i]
6. i ¬ i-1
7. A[i+1] ¬ key
key=3

8 15 3 14 7 6 18 19

1 i j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 52
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do
5. A[i+1] ¬ A[i]
6. i ¬ i-1
7. A[i+1] ¬ key
key=3

8 15 15 14 7 6 18 19

1 i j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 53
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do
5. A[i+1] ¬ A[i]
6. i ¬ i-1
7. A[i+1] ¬ key
key=3

8 15 15 14 7 6 18 19

i j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 54
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do
5. A[i+1] ¬ A[i]
6. i ¬ i-1
7. A[i+1] ¬ key
key=3

8 15 15 14 7 6 18 19

i j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 55
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do
5. A[i+1] ¬ A[i]
6. i ¬ i-1
7. A[i+1] ¬ key
key=3

8 8 15 14 7 6 18 19

i j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 56
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do
5. A[i+1] ¬ A[i]
6. i ¬ i-1
7. A[i+1] ¬ key
key=3

8 8 15 14 7 6 18 19

i 1 j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 57
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do
5. A[i+1] ¬ A[i]
6. i ¬ i-1
7. A[i+1] ¬ key
key=3

8 8 15 14 7 6 18 19

i 1 j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 58
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do
5. A[i+1] ¬ A[i]
6. i ¬ i-1
7. A[i+1] ¬ key
key=3

3 8 15 14 7 6 18 19

i 1 j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 59
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do
5. A[i+1] ¬ A[i]
6. i ¬ i-1
7. A[i+1] ¬ key
Sortiert

3 8 15 14 7 6 18 19

1 j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 60
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do
5. A[i+1] ¬ A[i]
6. i ¬ i-1
7. A[i+1] ¬ key
Sortiert key

3 8 15 14 7 6 18 19

1 j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 61
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do
5. A[i+1] ¬ A[i]
6. i ¬ i-1
7. A[i+1] ¬ key
Sortiert key=14

3 8 15 14 7 6 18 19

1 j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 62
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do Ø verschiebe alle Elemente aus
5. A[i+1] ¬ A[i] Ø A[1…j-1], die größer als key
6. i ¬ i-1 Ø sind eine Stelle nach rechts
7. A[i+1] ¬ key
Sortiert key=14

3 8 15 14 7 6 18 19

1 j-1 j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 63
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do Ø verschiebe alle Elemente aus
5. A[i+1] ¬ A[i] Ø A[1…j-1], die größer als key
6. i ¬ i-1 Ø sind eine Stelle nach rechts
7. A[i+1] ¬ key
Sortiert key=14

3 8 15 14 7 6 18 19

1 j-1 j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 64
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do Ø verschiebe alle Elemente aus
5. A[i+1] ¬ A[i] Ø A[1…j-1], die größer als key
6. i ¬ i-1 Ø sind eine Stelle nach rechts
7. A[i+1] ¬ key
key=14

3 8 15 15 7 6 18 19

1 i j-1 j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 65
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do Ø verschiebe alle Elemente aus
5. A[i+1] ¬ A[i] Ø A[1…j-1], die größer als key
6. i ¬ i-1 Ø sind eine Stelle nach rechts
7. A[i+1] ¬ key
key=14

3 8 15 15 7 6 18 19

1 i j-1 j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 66
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do Ø verschiebe alle Elemente aus
5. A[i+1] ¬ A[i] Ø A[1…j-1], die größer als key
6. i ¬ i-1 Ø sind eine Stelle nach rechts
7. A[i+1] ¬ key Ø Speichere key in Lücke
key=14

3 8 14 15 7 6 18 19

1 i j-1 j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 67
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do Ø verschiebe alle Elemente aus
5. A[i+1] ¬ A[i] Ø A[1…j-1], die größer als key
6. i ¬ i-1 Ø sind eine Stelle nach rechts
7. A[i+1] ¬ key Ø Speichere key in Lücke
Sortiert

3 8 14 15 7 6 18 19

1 j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 68
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do Ø verschiebe alle Elemente aus
5. A[i+1] ¬ A[i] Ø A[1…j-1], die größer als key
6. i ¬ i-1 Ø sind eine Stelle nach rechts
7. A[i+1] ¬ key Ø Speichere key in Lücke
Sortiert key=7

3 8 14 15 7 6 18 19

1 j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 69
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do Ø verschiebe alle Elemente aus
5. A[i+1] ¬ A[i] Ø A[1…j-1], die größer als key
6. i ¬ i-1 Ø sind eine Stelle nach rechts
7. A[i+1] ¬ key Ø Speichere key in Lücke
Sortiert key=7

3 8 14 15 7 6 18 19

1 j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 70
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do Ø verschiebe alle Elemente aus
5. A[i+1] ¬ A[i] Ø A[1…j-1], die größer als key
6. i ¬ i-1 Ø sind eine Stelle nach rechts
7. A[i+1] ¬ key Ø Speichere key in Lücke
key=7

3 8 8 14 15 6 18 19

1 j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 71
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do Ø verschiebe alle Elemente aus
5. A[i+1] ¬ A[i] Ø A[1…j-1], die größer als key
6. i ¬ i-1 Ø sind eine Stelle nach rechts
7. A[i+1] ¬ key Ø Speichere key in Lücke
key=7

3 8 8 14 15 6 18 19

1 j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 72
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do Ø verschiebe alle Elemente aus
5. A[i+1] ¬ A[i] Ø A[1…j-1], die größer als key
6. i ¬ i-1 Ø sind eine Stelle nach rechts
7. A[i+1] ¬ key Ø Speichere key in Lücke
key=7

3 7 8 14 15 6 18 19

1 j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 73
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do Ø verschiebe alle Elemente aus
5. A[i+1] ¬ A[i] Ø A[1…j-1], die größer als key
6. i ¬ i-1 Ø sind eine Stelle nach rechts
7. A[i+1] ¬ key Ø Speichere key in Lücke
Sortiert

3 7 8 14 15 6 18 19

1 j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 74
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do Ø verschiebe alle Elemente aus
5. A[i+1] ¬ A[i] Ø A[1…j-1], die größer als key
6. i ¬ i-1 Ø sind eine Stelle nach rechts
7. A[i+1] ¬ key Ø Speichere key in Lücke
Sortiert key=6

3 7 8 14 15 6 18 19

1 j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 75
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do Ø verschiebe alle Elemente aus
5. A[i+1] ¬ A[i] Ø A[1…j-1], die größer als key
6. i ¬ i-1 Ø sind eine Stelle nach rechts
7. A[i+1] ¬ key Ø Speichere key in Lücke
Sortiert key=6

3 7 8 14 15 6 18 19

1 j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 76
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do Ø verschiebe alle Elemente aus
5. A[i+1] ¬ A[i] Ø A[1…j-1], die größer als key
6. i ¬ i-1 Ø sind eine Stelle nach rechts
7. A[i+1] ¬ key Ø Speichere key in Lücke
key=6

3 7 7 8 14 15 18 19

1 j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 77
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do Ø verschiebe alle Elemente aus
5. A[i+1] ¬ A[i] Ø A[1…j-1], die größer als key
6. i ¬ i-1 Ø sind eine Stelle nach rechts
7. A[i+1] ¬ key Ø Speichere key in Lücke
key=6

3 7 7 8 14 15 18 19

1 j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 78
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do Ø verschiebe alle Elemente aus
5. A[i+1] ¬ A[i] Ø A[1…j-1], die größer als key
6. i ¬ i-1 Ø sind eine Stelle nach rechts
7. A[i+1] ¬ key Ø Speichere key in Lücke
key=6

3 6 7 8 14 15 18 19

1 j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 79
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do Ø verschiebe alle Elemente aus
5. A[i+1] ¬ A[i] Ø A[1…j-1], die größer als key
6. i ¬ i-1 Ø sind eine Stelle nach rechts
7. A[i+1] ¬ key Ø Speichere key in Lücke
Sortiert

3 6 7 8 14 15 18 19

1 j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 80
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do Ø verschiebe alle Elemente aus
5. A[i+1] ¬ A[i] Ø A[1…j-1], die größer als key
6. i ¬ i-1 Ø sind eine Stelle nach rechts
7. A[i+1] ¬ key Ø Speichere key in Lücke

3 6 7 8 14 15 18 19

1 j n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 81
Insertion Sort
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do Ø verschiebe alle Elemente aus
5. A[i+1] ¬ A[i] Ø A[1…j-1], die größer als key
6. i ¬ i-1 Ø sind eine Stelle nach rechts
7. A[i+1] ¬ key Ø Speichere key in Lücke
Sortiert

3 6 7 8 14 15 18 19

1 n
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 82
Insertion Sort visualisiert

https://www.youtube.com/watch?v=ROalU379l3U

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 83
Ausblick: Laufzeitanalyse und Korrektheit
InsertionSort(Array A) Ø Eingabegröße n
1. for j ¬ 2 to length(A) do Ø length(A) = n
2. key ¬ A[j]
3. i ¬ j-1
4. while i>0 and A[i]>key do Ø verschiebe alle Elemente aus
5. A[i+1] ¬ A[i] Ø A[1…j-1], die größer als key
6. i ¬ i-1 Ø sind eine Stelle nach rechts
7. A[i+1] ¬ key Ø Speichere key in Lücke

Kernfragen
Wie kann man die Laufzeit eines Algorithmus bestimmen?
Sortiert der Algorithmus alle möglichen Eingaben auch wirklich korrekt?
Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22
Seite 84
Ausblick: Sortieralgorithmen im Vergleich

https://www.youtube.com/watch?v=ZZuD6iUe3Pc

Algorithmen, Pseudocode, Sortieren | Manfred Hauswirth | Einführung in die Programmierung, WS 21/22


Seite 85

Das könnte Ihnen auch gefallen