Zusammenfassung
„Einen Satz von gleichartigen Daten (Telefonverzeichnis, Bücherliste, Messergebnisse) in eine bestimmte Reihenfolge zu bringen (ordnen) ist eine klassische Aufgabe der Informatik. An den unterschiedlich komplexen Sortieralgorithmen kann man einerseits das „Programmieren im Kleinen“ (mit Verzweigungen und Schleifen) sehr gut üben; andererseits ist hier durch das Wachstum der zu sortierenden Datenmengen die Frage nach der Komplexität eines Algorithmus schon in der Zeit gestellt worden, in der Informatik primär durch Mathematiker getrieben wurde – daher existieren gute theoretisch fundierte Analysen dafür. Auch wenn heute Sortieralgorithmen nicht mehr programmiert werden müssen, weil es viele und gute vorgefertigte gibt, ist der gut ausgebildete Informatiker gehalten, sie zu kennen, um für eine gegebene Aufgabe den optimalen Algorithmus auswählen zu können.“
Access this chapter
Tax calculation will be finalised at checkout
Purchases are for personal use only
Notes
- 1.
D. h. Basistyp wie int, char oder float, aber kein boolean.
- 2.
Der generische Parameter <Telefonbucheintrag> stellt sicher, dass compareTo zwei Objekte vom gleichen Typ vergleicht.
- 3.
Wir gehen davon aus, dass es keine zwei Kunden mir gleicher Kundennummer gibt.
- 4.
Design pattern, s. z. B. [Gam].
- 5.
Auf Deutsch: Blasensort .
- 6.
Bei aufsteigenden Sortierung.
- 7.
Der geschachtelte generische Parameter <E extends Comparable<E>> stellt sicher, dass compareTo zwei Objekte vom selben (aktuellen generischen) Typ vergleicht.
- 8.
Mit den Laufvariablen i und j.
- 9.
Wir gehen hier und im Weiteren davon aus, dass sich die Methode sort (wie oben) in einer generischen Klasse nach dem Entwurfsmuster Strategie befindet.
- 10.
Auf Deutsch: direktes Einfügen .
- 11.
Auf Deutsch: direktes Auswählen .
- 12.
Benannt nach D. L. Shell, s. [Sh].
- 13.
subList enthält das Element mit dem Index des zweiten Parameters nicht.
- 14.
In einer Version mit komplexerer Signatur (mit einem zusätzlichen Ausgabeparameter, wie bei merge) wird die Erzeugung des Ausgabeobjekts dem Benutzer überlassen.
- 15.
Auf Englisch: heap.
- 16.
Auch bei anderen Programmiersprachen wie C, Pascal oder Ada, nicht aber bei Cobol und (der Originalversion von) Fortran.
- 17.
Der Operator/bezeichnet die Ganzzahldivision, d. h. 1/2 = 0, 2/2 = 1, 3/2 = 1, 4/2 = 2, usw.
- 18.
Es gibt natürlich auch „umgekehrte Halden“, bei denen keine Komponente einen kleineren Schlüssel hat als ihr Vorgänger.
- 19.
Referenzierte Objekte, wie auch globale Variablen können jedoch verändert werden.
- 20.
Nicht zu verwechseln mit den Ein/Ausgabeströmen von java.io.
- 21.
Ähnlich wie iterator(), der ein Iterator-Objekt liefert; s. Abschn. 3.2.4.
- 22.
„terminal operation“, die kein Stream liefert, so kann ihr keine Stream-Methode angehängt werden.
- 23.
Hier wird die Speicherkomplexität linear.
- 24.
Die Referenz muss global vereinbart werden, weil sie in der letzten Zeile des Rumpfs verändert wird (Seiteneffekt).
- 25.
Auf Englisch merge.
- 26.
Häufig durch die Implementierung der Schnittstelle Iterable<E>, die die Funktion iterator() enthält; diese liefert ein Iterator-Objekt.
- 27.
Wir könnten auch eine Funktion merge mit dem Ergebnistyp Collection<E> schreiben. Der Vorteil ist hier, dass der Benutzer die Klasse des Ergebnisobjekts bestimmen kann.
- 28.
Genauer: eine variable Anzahl von Parametern, eingeführt in Java 5.
- 29.
Auf English deferred.
Author information
Authors and Affiliations
Rights and permissions
Copyright information
© 2017 Springer Fachmedien Wiesbaden GmbH
About this chapter
Cite this chapter
Solymosi, A., Grude, U. (2017). Sortierverfahren. In: Grundkurs Algorithmen und Datenstrukturen in JAVA. Springer Vieweg, Wiesbaden. https://doi.org/10.1007/978-3-658-17546-7_5
Download citation
DOI: https://doi.org/10.1007/978-3-658-17546-7_5
Published:
Publisher Name: Springer Vieweg, Wiesbaden
Print ISBN: 978-3-658-17545-0
Online ISBN: 978-3-658-17546-7
eBook Packages: Computer Science and Engineering (German Language)