[请帮助改善代码-算法会在所有情况下都找到搜索到的数字,但当您尝试找到0索引编号或在我的情况下search_num = 1时除外。
list1 = [1, 3, 4, 5, 19, 21, 52, 100, 152]
search_num = 1
def binarySearch(array, number):
lower_b_index = 0
upper_b_index = len(array) - 1
while lower_b_index <= upper_b_index:
mid_point = (lower_b_index + upper_b_index) // 2
if array[mid_point] == number:
return mid_point
elif array[lower_b_index] == number:
return lower_b_index
else:
if array[mid_point] < number:
lower_b_index = mid_point + 1
else:
upper_b_index = mid_point - 1
return False
a1 = binarySearch(list1, search_num)
if a1:
print("The searched position: ", a1 + 1)
else:
print("Not Found!")
您的问题不在您的binarySearch
算法中,而是在您的if
语句之后。
您算法返回正确的a1 = 0
,并且您检查的if 0
和0的布尔值为False [>]
一个简单的解决方法是return None
并检查if a1 is not None
list1 = [1, 3, 4, 5, 19, 21, 52, 100, 152]
search_num = 1
def binarySearch(array, number):
lower_b_index = 0
upper_b_index = len(array) - 1
while lower_b_index <= upper_b_index:
mid_point = (lower_b_index + upper_b_index) // 2
if array[mid_point] == number:
return mid_point
elif array[lower_b_index] == number:
return lower_b_index
else:
if array[mid_point] < number:
lower_b_index = mid_point + 1
else:
upper_b_index = mid_point - 1
return None # Change here
a1 = binarySearch(list1, search_num)
if a1 is not None: # Change here
print("The searched position: ", a1 + 1)
else:
print("Not Found!")