Я создал двоичный поиск, но я застрял в проблеме. Всякий раз, когда я запускаю main(), я просто получаю None, когда ключ равен 8, 5, 2 и 1. Я также пытаюсь вернуть bsearch индекс значения key_point в integer_list, но вместо этого он просто возвращает key_point. Если кто-то может сообщить мне, что происходит, я был бы признателен.Python повторный выход из программы
def bsearch(integer_list, key_point, start, end):
midpoint = (start + end) // 2
if start >= end:
return None
elif integer_list[midpoint] == key_point:
return key_point
elif integer_list[midpoint] > key_point:
return bsearch(integer_list, key_point, start, (midpoint - 1))
elif integer_list[midpoint] < key_point:
return bsearch(integer_list, key_point, (midpoint + 1), end)
def main():
integer_list = [x + 1 for x in range(0, 10)]
key = 11
p = len(integer_list) - 1
start = integer_list[0]
end = integer_list[p]
while key >= 1:
bsearch(integer_list, key, start, end)
print(bsearch(integer_list, key, start, end))
key = key - 1
Я понимаю, что вы могли бы делать практику алгоритма - но если вы _aren't_, питон уже поставляет бинарные алгоритмы поиска в 'bisect'. – mgilson
Почему ваш старт и конец равны первому и последнему значению списка? Он должен быть первым и последним индексом массива, в этом случае 0 и 9 –
Если вы не хотите вернуть None, тогда не программируйте его. If start> = end: return None. Верните что-то еще, даже если вам нужно добавить предыдущую временную переменную результата. –