Прежде всего, позвольте мне рассказать вам, как я на самом деле использую алгоритмы, чтобы не возникла путаница, поскольку это НЕ типичное использование алгоритма двоичного поиска.
Мне нужны функции для чисто академических c / тестирование для сравнения скоростей с другими тестируемыми мною функциями, включая Python встроенные isinstance () и в методы / операнды.
Я просматриваю строку, содержащую цифры и буквы, и проверяю, является ли символ из нее целым числом.
Таким образом, применение следующих алгоритмов на каждой итерации (т. Е. Символа) l oop в строке выглядит следующим образом:
binSearch("0123456789", "4", 0, 10)
«4» - это просто пример, как вы можете сказать.
binSearch2("0123456789", "w")
«w» - это просто пример, который вы можете сказать.
ПРИМЕЧАНИЕ: Мне известно о существовании модуля bisect
. Впрочем, цель и цель моих экспериментов и упражнений не в этом.
# РЕКУРСИВНАЯ ВЕРСИЯ НИЖЕ
def binSearch(list, digit, low, up):
mid = (low + up) // 2
midd = list[mid]
if digit == midd:
return True
elif digit > midd:
if mid == 9: return False
return True and binSearch(list, digit, mid, up)
elif digit < midd:
return True and binSearch(list, digit, low, mid)
# ИТЕРАЦИОННАЯ ВЕРСИЯ НИЖЕ
def binSearch2(list, digit):
low = 0
up = len(list)
mid = (low + up) // 2
while mid > 0:
if digit == list[mid]:
return True
elif digit > list[mid]:
low = mid
if low == 9: break
else:
up = mid
mid = (low + up) // 2
#print(low, mid, up)
if digit == list[mid]: return True
return False
Комментарии приветствуются!