Questo algoritmo funziona utilizzando un approccio divide et impera. Inizia dividendo l'elenco dato in due parti e trova una posizione sintonizzata dimezzando ripetutamente l'elenco finché non viene trovato l'elemento di destinazione. Questo approccio è vantaggioso perché riduce notevolmente il numero di confronti necessari per trovare il valore target. Se l'elemento non viene trovato, i limiti superiore e inferiore per la ricerca diventano uguali, il che significa che l'elemento non esiste nell'elenco. Pertanto, è garantito che l'algoritmo trovi l'obiettivo (se esiste) o restituisca None se non esiste.
def binary_search(list, target):
  lower = 0 
  upper = len(list) - 1
    
  while lower <= upper: 
    mid = (lower + upper) // 2  # Floor Division
    guess = list[mid]
    if guess == target:
      return mid
    if guess > target:
      upper = mid - 1
    else: 
      lower = mid + 1
 
  return None
Spiega perché questo algoritmo funziona.