Suchen und Sortieren
OOPM, Ralf Lämmel
Unterhaltet Euch mal mit Euren Großeltern wie Sortieren
früher funktionierte!
Das Such-Problem
Eingabe:
Ein Feld a mit n Elementen vom Typ t.
Ein Wert x vom Typ t.
Ausgabe:
Ein Boolescher Wert:
true: Es gibt ein 0 <= i < n so dass a[i] == x false: sonst
Wir nehmen nichts weiter an als dass wir Gleichheit für t
bestimmen können.
Lineare Suche (Index-Rückgabe)
public static int linear(int[] a, int x) { for (int i=0; i<a.length; i++)
if (a[i] == x) return i;
return -1;
}
Beachte: eine For-Each-
Schleife wäre hier nicht (sinnvoll) anwendbar, da wir i zurückgeben
wollen!
Siehe package algorithm.search
Binäre Suche
Basierend auf der Annahme, dass das Eingabefeld (etwa aufsteigend) sortiert ist, beginnend in der Mitte des Feldes, suche das Element mittels Halbierung des Suchraums in jedem Schritt.
Die Suche beginnt mit i = Mitte.
Wenn a[i] = x, dann gefunden.
Wenn a[i] < x, dann in rechter Hälfte fortsetzen.
Wenn a[i] > x, dann in linker Hälfte fortsetzen.
Testen der Sortiertheit
Beispiel 1:
Eingabe: {1,2,3,4}
Ausgabe: true
Beispiel 2:
Eingabe: {1,3,2,4}
Ausgabe: false
Das Problem
des Testens der Sortiertheit
Eingabe:
Ein Feld a mit n Elementen vom Typ t.
Ausgabe:
Ein Boolescher Wert:
true: a[i-1] <= a[i] für alle i mit 1 <= i < n
http://www.bambinipronto.com.au/