Sortierte Liste und compareTo

Intermediate Algorithmen und Datenstrukturen Deutsch
Also available: English
Created by Best · 16.08.2026 at 09:13 UTC

Eine sortierte Liste hält die Invariante: aufeinanderfolgende Elemente stehen in nicht fallender Ordnung bezüglich einer Ordnung. Einfügen sucht die Stelle und hängt den Knoten ein.

In Java liefert Comparable.compareTo die natürliche Ordnung. Comparator erlaubt eine externe Ordnung ohne die Elementklasse zu ändern.

Beispiel: Einfügen von 5 in 1-3-8 ergibt 1-3-5-8.

Komplexität: Suche $O(n)$ in der verketteten Liste, danach $O(1)$ Umhängen.

Wo gebraucht

Kleine sortierte Mengen, Merge von Streams, Prioritäten ohne vollen Heap, wenn n klein bleibt. compareTo/Comparator ist dieselbe Ordnung, die TreeMap, Sortierung und PriorityQueue nutzen.

Vertiefung

Eine sortierte Liste erhält nach jeder Änderung die Invariante, dass aufeinanderfolgende Elemente gemäss Vergleichsrelation nicht absteigen. Die Einfügeposition ist die erste Stelle, an der das neue Element nicht mehr grösser als der aktuelle Wert ist.

compareTo liefert ein negatives, null oder positives Ergebnis. Der konkrete Betrag besitzt keine portable Bedeutung. Eine konsistente Ordnung sollte transitiv und antisymmetrisch im Vorzeichen sein; andernfalls können Suche und Einfügen widersprüchliche Positionen liefern.

Bei einer verketteten Struktur bleibt die Suche nach der Stelle linear. Sortierung verbessert dort nicht den wahlfreien Zugriff, kann aber frühes Abbrechen bei Suche und geordnete Zusammenführung zweier Listen ermöglichen.

Schwierigkeitsstufen

  1. Das Vorzeichen von Vergleichsergebnissen korrekt lesen.
  2. Eine Einfügeposition unter Duplikatregeln bestimmen.
  3. Folgen einer nichttransitiven Vergleichsrelation analysieren.

Fallstricke

Code darf nicht voraussetzen, dass das Ergebnis genau -1, 0 oder 1 ist. Ausserdem kann eine Ordnung, die mit equals unvereinbar ist, überraschende Duplikatsemantik erzeugen.

University approvals: 0
Tasks
Question 1

Wann lohnt Comparable auf der Elementklasse?

Question 2

Implementiere insertSorted für aufsteigend sortierte einfach verkettete Int-Liste.

Hint

Für primitive int-Werte genügen <, <= und >. Ein neuer Knoten kann mit Nachfolger direkt im Konstruktor erzeugt werden.

Starter code is prefilled; replace TODO blocks with your solution.
1 test case will be used for grading
Run checks runtime behavior only. Final correctness is evaluated when you submit.
Question 3

Was darf portabler Code aus x.compareTo(y) verwenden?

Card Info
  • Topic: Algorithmen und Datenstrukturen
  • Difficulty: Intermediate
  • Completed: 0 users
Creator
Best
Best
BestBuddy