Proszę wyjaśnić, dlaczego ten algorytm działa.
def binary_search(lista, cel):
lower = 0
upper = len(lista) - 1

while lower <= upper:
mid = (lower + upper) // 2 # Podział na piętra
guess = list[mid]
if guess == target:
return mid
if guess > target:
upper = mid - 1
else:
lower = mid + 1

return None