def search_binary(value, list): start = 0 end = len(list)-1 found = False while start <= end and not found: print(f'DEBUG {start} - {end}') mid = (start + end) // 2 if list[mid] == value: found = True else: if value < list[mid]: end = mid - 1 else: start = mid + 1 if found: return mid else: return None list = [0, 1, 2, 3, 3, 4, 5, 6, 7, 9] value = 5.5 idx = search_binary(value, list) print(f'{value} is on the {list} on position {idx}')
def search_linear(value, list): idx = 0 found = False while not found and idx < len(list): if list[idx] == value: found = True else: idx += 1 return idx if idx < len(list) else None def search_binary(value, list): start = 0 end = len(list)-1 found = False while start <= end and not found: mid = (start + end) // 2 if list[mid] == value: found = True else: if value < list[mid]: end = mid - 1 else: start = mid + 1 if found: return mid else: return None import time import random max_len = 100000000 ordered_list = list(range(max_len)) value = random.randint(0, max_len) print(f'Searching value {value}') # checking time - linear search start = time.perf_counter() idx = search_linear(value, ordered_list) stop = time.perf_counter() print(f'Linear search: value found at {idx} in {stop - start} seconds') # checking time - binary search start = time.perf_counter() idx = search_binary(value, ordered_list) stop = time.perf_counter() print(f'Binary search: value found at {idx} in {stop - start} seconds')