有人能告诉我为什么这种二进制搜索会导致我的MacbookPro(Montery v12.1)冻结吗



有时这段代码会找到正确的目标,而在其他目标上,它会冻结,我不知道为什么。有人能帮忙吗?Python 3.9.7。应返回指定的目标。

# the result should return the index
def binarySearch(arr, target):
left_pointer = 0
right_pointer = len(arr) - 1

while left_pointer <= right_pointer:
mid = (left_pointer + right_pointer//2)

if(arr[mid] == target):
return mid
if(arr[mid] < target):
left_pointer = mid + 1
else:
right_pointer = mid - 1
return -1

arr = [1, 2, 3, 4, 5, 6]
target = 5
result = binarySearch(arr, target)

if result != -1:
print(f"the target is at index {result}")
else:
print("The target is not in the array")

正如@stark在评论中指出的那样,你需要改变评估的方式"中间";从";left_pointer";以及";右指针";。

假设left_pointer=7,right_pointer=9,并且您的";目标";位于数组的索引8中。你计算";中间";,它将是7+9//2=7+4=11,这是不正确的,因为运算符的优先级。检查此项以更好地了解python中的运算符优先级。

工作代码:

# the result should return the index
def binarySearch(arr, target):
left_pointer = 0
right_pointer = len(arr) - 1

while left_pointer <= right_pointer:
mid = (left_pointer + right_pointer)//2

if(arr[mid] == target):
return mid
if(arr[mid] < target):
left_pointer = mid + 1
else:
right_pointer = mid - 1
return -1

arr = [1, 2, 3, 4, 5, 6]
target = 5
result = binarySearch(arr, target)

if result != -1:
print(f"the target is at index {result}")
else:
print("The target is not in the array")

最新更新