Wieso funktioniert mein Python-Code für eine binäre Suche in einem Array nicht?


23.11.2023, 15:33

Der Code nochmal

2 Antworten

Du hast eine Endlosschleife erzeugt, denn ein Fund wird von dir ignoriert.

Schau dir dazu die Zwischenwerte an, die bei Programmablauf erzeugt werden:

a = 0
b = 9

0 <= 9 ist wahr
  m = 4
  8 <= 5 ist unwahr
  a = 5

5 <= 9 ist wahr
  m = 7
  8 <= 8 ist wahr
  b = 7

5 <= 7 ist wahr
  m = 6
  8 <= 7 ist unwahr
  a = 7

7 <= 7 ist wahr
  m = 7
  8 <= 8 ist wahr
  b = 7

usw. ...

Bei Fund sollte die Schleife stattdessen beendet werden.

while a <= b:
  counter += 1

  m = (a + b) // 2

  if num == arr[m]:
    return counter

  if num < arr[m]:
    b = m
  else:
    a = m + 1

so wie ich das sehe, wird, wenn die zahl gefunden wird -1 von deiner funktion ausgegeben, aber bei deiner letzten if else verzweigung wird -1 dafür benutzt um zu zeigen das die zahl nicht gefunden wurde