import logging import random import time logging.basicConfig(level=logging.DEBUG) logger = logging.getLogger(__name__) def binary_search(arr, low, high, x): # x not found, low has overlapped high so we return None if high < low: return mid = (high + low) // 2 # x found at middle of split, return its index if arr[mid] == x: return mid # x in left side of split elif arr[mid] > x: return binary_search(arr, low, mid - 1, x) # x in right side of split else: return binary_search(arr, mid + 1, high, x) LOWER = 1000 UPPER = 1000000 SAMPLE_SIZE = 1000 numbers = random.sample(range(LOWER, UPPER), SAMPLE_SIZE) numbers.sort() start = time.time() result = None while result is None: guess = random.randrange(LOWER, UPPER) logger.debug(f"guess: {guess}") result = binary_search(numbers, 0, len(numbers) - 1, guess) print(f"Found {guess} at index {result}. Running time {time.time() - start}")