4. Funktion "Binäre Suche"
Funktionsweise: Die Funktion "binäre Suche" funktioniert nur bei geordneten Arrays. Sie nimmt den Wert in der Mitte des Arrays und prüft ihn, ob er größer oder kleiner ist als der gesuchte Wert. Wenn der Wert im Array größer ist, wird in der unteren Hälfte weitergesucht; wenn der Wert im Array kleiner ist, wird in der Oberen Hälfte weitergesucht. Dieser Vorgang wiederholt sich solange, bis der Wert gefunden wurde.
Funktionsnamen: binsuche
Parameter : such Die zu suchende Zahl groesse Die Anzahl derWerte, die im Array gespeichert sind arr Das Array, in dem die Zahl gesucht werden soll
Rückgabewert:
Als Rückgabewert wird die Position des Wertes im Array geliefert.Pseudocode ende := FALSE; re := 1; li := groesse;
(* Wenn die Zahl gefunden wurde oder keine Zahl im Array gefunden wurde bricht die Schleife ab. *) Solange nicht(ende) und (li <> re) mache pos := ((re + li) DIV 2); Wenn pos = 9 Dann i := i + 1; Wenn i >= 3 Dann pos := 10 Ende Wenn Ende Wenn Wenn arr[pos] = such Dann (*Wert gefunden *) ende := true; binsuche := pos Ende Wenn Sonst Wenn arr[pos] > such Dann li := pos Ende Wenn Sonst re := pos ende Sonst ende Sonst ende solange (* OF WHILE *)
(* Der Alghorithmus liefert -1 zurueck, wenn er den Wert im Array nicht findet. *) Wenn (ABS(re - li) <= 1) und nicht(ende) Dann binSuche := -1;
Quellcode FUNCTION binsuche (such : INTEGER; groesse : INTEGER; arr : t_tab) : INTEGER;
VAR re, li : INTEGER; (* Positionen, zwischen denen der Wert liegt *) ende : BOOLEAN; (* Abbruchbedingung *) pos : INTEGER; i : INTEGER;
BEGIN ende := FALSE; re := 1; li := groesse;
(* Wenn die Zahl gefunden wurde oder keine Zahl im Array gefunden wurde bricht die Schleife ab. *) WHILE NOT(ende) AND (li <> re) DO BEGIN pos := ((re + li) DIV 2); IF pos = 9 THEN BEGIN i := i + 1; IF i >= 3 THEN pos := 10 END; IF arr[pos] = such THEN BEGIN (*Wert gefunden *) ende := true; binsuche := pos END ELSE IF arr[pos] > such THEN li := pos ELSE re := pos END; (* OF WHILE *)
(* Der Alghorithmus liefert -1 zurueck, wenn er den Wert im Array nicht findet. *) IF (ABS(re - li) <= 1) AND NOT(ende) THEN binSuche := -1; END; (* OF Function *)
|