06.10.2013 Aufrufe

Eine Einführung in die Programmiersprache C und ... - C /C++ Ecke

Eine Einführung in die Programmiersprache C und ... - C /C++ Ecke

Eine Einführung in die Programmiersprache C und ... - C /C++ Ecke

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

<strong>E<strong>in</strong>e</strong> <strong>E<strong>in</strong>führung</strong> <strong>in</strong> <strong>die</strong> Informatik <strong>und</strong> <strong>die</strong> <strong>Programmiersprache</strong> C<br />

23 Sortieren<br />

<strong>E<strong>in</strong>e</strong>r der am häufigsten gebrauchten Algorithmen ist das Sortieren. Überlegen Sie sich als e<strong>in</strong>leitendes<br />

Beispiel kurz wie Sie das folgende Array mit 5 Zahlen <strong>in</strong> aufsteigender Reihenfolge sortieren<br />

würden (Als Anweisungsfolge an e<strong>in</strong>e Person):<br />

<strong>in</strong>t Werte[5] = {9, 17, 3, 21, 5};<br />

Es gibt sehr viele verschiedene bekannte Sortierverfahren, <strong>die</strong> sich durch Effizienz <strong>und</strong> Kompliziertheit<br />

vone<strong>in</strong>ander unterscheiden. Die am e<strong>in</strong>fachsten zu verstehenden Verfahren s<strong>in</strong>d im allgeme<strong>in</strong>en<br />

auch <strong>die</strong> am wenigsten effizienten. E<strong>in</strong>ige bekannte Verfahren s<strong>in</strong>d <strong>in</strong> der folgenden Tabelle<br />

aufgeführt (Siehe 'The Art of Computerprogramm<strong>in</strong>g', Donald E.. Knuth, Addsion Wesley):<br />

Name Implementation Laufzeit Speicher<br />

Durchschnitt Maximal bedarf<br />

Bubblesort E<strong>in</strong>fach 5.75N 2 +N*ln(N) 7.5N 2 N+1<br />

Straight <strong>in</strong>sertion E<strong>in</strong>fach 1.5N 2 +9.5N 3N 2 N+1<br />

Straight Selection E<strong>in</strong>fach 2.5N 2 +3N*ln(N) 3.25N 2 N<br />

Quicksort Komplex 11.6N*ln(N)-1.7N >=2N 2 N + ln*(N)<br />

Heapsort Komplex 23.N*ln(N) 24.5N*ln(N) N<br />

Listmerge Komplex 14.4N*ln(N)+4.9N 14.4N*ln(N) N<br />

N: Anzahl der zu sortierenden Elemente<br />

ln(): Logarithmus.<br />

Quicksort gilt allgeme<strong>in</strong> als e<strong>in</strong>er der am universellsten e<strong>in</strong>setzbaren Algorithmen. Wenn das Feld<br />

allerd<strong>in</strong>gs bereits sortiert ist, kann Quicksort sehr langsam werden. Je nach Anwendungsfall gibt es<br />

jeweils e<strong>in</strong>en optimalen Algorithmus, <strong>die</strong>s kann von den Daten, der Hardware <strong>und</strong> vom verfügbaren<br />

Speicherplatz abhängen.<br />

Für Spezialfälle (Fast sortiertes Feld, <strong>in</strong> umgekehrter Reihenfolge sortiertes Feld) können <strong>die</strong> Algorithmen<br />

bei Bedarf oft optimiert werden.<br />

Wir werden hier Bubblesort, Straight Insertion, Straight Selection, Quicksort <strong>und</strong> Listmerge<br />

näher betrachten:<br />

Bei allen Algorithmen werden wir <strong>in</strong> aufsteigender Reihenfolge sortieren. Selbstverständlich können<br />

<strong>die</strong>se Algorithmen durch entsprechende Modifikation auch <strong>in</strong> <strong>die</strong> andere Richtung sortieren.<br />

Bei e<strong>in</strong>em Sortieralgorithmus spricht man von e<strong>in</strong>em stabilen Sortieren, wenn e<strong>in</strong>e bereits existierende<br />

Ordnung soweit möglich erhalten bleibt, von e<strong>in</strong>em <strong>in</strong>stabilen Sortieren, wenn e<strong>in</strong>e bereits<br />

bestehende Ordnung verloren geht. Wenn zum Beispiel e<strong>in</strong>e Adresskartei mit e<strong>in</strong>em stabilen Sortieralgorithmus<br />

zuerst nach Vornamen, dann nach Nachnamen sortiert wird, bleibt <strong>die</strong> Sortierung<br />

nach Vornamen bei E<strong>in</strong>trägen mit gleichem Nachnamen bestehen, bei e<strong>in</strong>em Instabilen nicht.<br />

Man spricht von <strong>in</strong>ternem Sortieren, wenn sich der ganze Datenbestand wärend des sortierens im<br />

Hauptspeicher bef<strong>in</strong>det, <strong>und</strong> von externem Sortieren, wenn <strong>die</strong> Daten auf H<strong>in</strong>tergr<strong>und</strong>speichern<br />

(Harddisk, Magnetband, …) verbleiben <strong>und</strong> nur Teile davon <strong>in</strong> den Hauptspeicher geladen werden.<br />

(Weil z.B. <strong>die</strong> Datenmenge im Hauptspeicher schlicht ke<strong>in</strong>en Platz hat).<br />

Gedruckt am 11.09.2008 13:04:00 Letzte Änderung am: 11. September 2008 Version 2.4, I. Oesch 88/147

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!