• Keine Ergebnisse gefunden

Quicksort

N/A
N/A
Protected

Academic year: 2022

Aktie "Quicksort"

Copied!
13
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Grundlagen der Programmierung (Vorlesung 19)

z Vorige Vorlesung

y Elementare Sortieralgorithmen und deren Analyse

z Heute

y Quicksort als höheres Sortierverfahren

z Lernziele

y Grundlagen der Analyse von Algorithmen

Ralf Möller, FH-Wedel

(2)

Sortierung von Reihungen

z Sortierproblem - Definition:

y Gegeben sei eine Reihung a der Form

array [ 1..n ] of M und eine totale Ordnung

£ definiert auf M.

y Annahme: Es seien alle a[i] verschieden

y Gesucht in eine Reihung b : array [ 1..n ] of M, so daß gilt:

Ó

1 £ i < n . (b[i] £ b[i+1]

fi Ô

j Ï {1, ...,n} . (a[j] = b[i]))

(3)

Vergleich elementarer Sortierverfahren

z Anzahl der Vergleiche:

z Anzahl der Bewegungen:

(4)

Folgerungen

(5)

Höhere Sortierverfahren: Quicksort

(6)

Quicksort: Kernidee

p

(7)

Quicksort

procedure quicksort(l, r : N

0

) begin

var k : N

0

; if l < r

then k := partition(l, r);

quicksort(l, k-1);

quicksort(k+1, r);

end if

end

(8)

Partition

function partition(l, r : N0) : N0 begin

var i, j, p : N0;

i, j, p := l-1, r, a[r]; (* Wähle Pivot-Wert *) repeat

durchsuche Array von links (i:=i+1), solange bis a[i] >= p;

durchsuche Array von rechts (j:=j-1), solange bis a[j] <= p;

vertausche a[i] und a[j];

until j <= i (* Zeiger kreuzen *) rückvertausche a[i] und a[j];

vertausche a[i] und a[r]; (* positioniere Pivot-Element *) i; (* endgültige Position des Pivot-Elements *)

end

(9)

Partition (2)

function partition(l, r : N0) : N0 begin

var i, j, p : N0;

i, j, p := l-1, r, a[r]; (* Wähle Pivot-Wert *) repeat

repeat i:=i+1 until a[i] >= p;

repeat j:=j-1 until a[j] <= p;

a[i], a[j] := a[j], a[i];

until j <= i (* Zeiger kreuzen *) a[j], a[i] := a[i], a[j];

a[i], a[r] := a[r], a[i];

i; (* endgültige Position des Pivot-Elements *) end

(10)

Partition (3)

z Wahl des Pivot-Wertes im Prinzip willkürlich

z Korrektheit des hier besprochenen Algorithmus

ist von der Wahl a[r] abhängig

(11)

Komplexitätsabschätzung

(12)

Zusammenfassung, Kernpunkte

z Einfache Sortierverfahren

y Sortieren durch Auswahl y Sortieren durch Einfügen

y Sortieren durch paarweises Vertauschen (Bubblesort)

z Höhere Sortierverfahren

y Quicksort

z Komplexitätsabschätzung

y n2 vs. n log n

y Teile-und-herrsche-Prinzip

(13)

Was kommt beim nächsten Mal?

z Abstrakte Maschinen für spezielle Aufgaben

z Automatentheorie und Formale Sprachen

Referenzen

ÄHNLICHE DOKUMENTE

Lernorientierte

❚ Zeichen können &#34;hintereinandergefügt&#34; werden und bilden durch die Reihung Worte. ❚ Der Operator hierzu

Aufbauend auf den in der „Einführung in die Computerlinguistik“ erworbenen Grundkenntnissen bietet dieses Seminar eine Einführung in die Theorie der Automaten und formalen

head: left hand side of a rule body: right hand side of a rule clause: rule or fact.. predicate: collection of clauses with

In einem letrec-Ausdruck können wir bei der Definition der Werte bereits Variablen verwenden, die erst später angelegt werden. == ⇒ Vor der eigentlichen Definition werden

• Stattdessen werden während der Abbarbeitung der Eingabe genau die Mengen konstruiert, die für die Eingabe notwendig sind ..... was aber in der Praxis (so gut wie) nie

Eine abstrakte Maschine ist eine idealisierte Hardware, für die sich einerseits. “leicht” Code erzeugen lässt, die sich andererseits aber auch “leicht” auf realer

Eine abstrakte Maschine ist eine idealisierte Hardware, für die sich einerseits.. “leicht” Code erzeugen lässt, die sich andererseits aber auch “leicht” auf realer