new_contents: '''
  O(log n) - Percorrendo While
  O(1) - Grava apenas a sequencia e algumas variaveis
  '''
  
  def busca_binaria(seq, procurado):
      if len(seq) == 0:
          return 0
  
      x_inicial = 0
      meio = len(seq) // 2
      x_final = len(seq)
  
      while x_inicial < x_final:
          if procurado <= seq[meio]:
              x_final = meio
              meio = (x_inicial + x_final) // 2
          else:
              x_inicial = meio + 1
              meio = (x_inicial + x_final) // 2
      return x_inicial
  
      pass
  
  
  import unittest
  
  
  class BuscaBinariaTestes(unittest.TestCase):
      def teste_lista_vazia(self):
          self.assertEqual(0, busca_binaria([], 1))
          self.assertEqual(0, busca_binaria([], 2))
          self.assertEqual(0, busca_binaria([], 3))
  
      def teste_lista_unitaria(self):
          self.assertEqual(0, busca_binaria([1], 0))
          self.assertEqual(0, busca_binaria([1], 1))
          self.assertEqual(1, busca_binaria([1], 2))
          self.assertEqual(1, busca_binaria([1], 3))
          self.assertEqual(1, busca_binaria([1], 4))
  
      def teste_lista_nao_unitaria(self):
          lista = list(range(10))
          self.assertEqual(0, busca_binaria(lista, -2))
          self.assertEqual(0, busca_binaria(lista, -1))
          for i in lista:
              self.assertEqual(i, busca_binaria(lista, i))
          self.assertEqual(10, busca_binaria(lista, 10))
          self.assertEqual(10, busca_binaria(lista, 11))
          self.assertEqual(10, busca_binaria(lista, 12))
  
      def teste_lista_elementos_repetidos(self):
          lista = [1, 1, 1, 2, 2, 2]
          self.assertEqual(0, busca_binaria(lista, 1))
          self.assertEqual(3, busca_binaria(lista, 2))
  
subject: Create Busca_Binaria.py