|
发表于 2023-6-7 14:32:03
|
显示全部楼层
本楼为最佳答案
本帖最后由 isdkz 于 2023-6-7 14:33 编辑
在这个二分查找的算法中,你需要计算中间索引,这个索引应该是low和high索引的平均值,所以应该除以2。但是在Python中,除法运算符"/"返回的是一个浮点数,这样可能会导致mid不再是整数,而在索引列表时,我们需要一个整数索引。所以,你应该使用"//"运算符,它会进行整数除法(也称为地板除),这样可以得到一个整数结果。
所以,你应该将 mid=(low + high) 修改为 mid=(low + high)//2 。
修正后的代码如下:
- def binary_search(list, item):
- low = 0
- high=len(list)-1
- while low<=high:
- mid=(low + high)//2
- guess=list[mid]
- if guess==item:
- return mid
- if guess>item:
- high=mid-1
- else:
- low=mid+1
- return None
- my_list=[1,3,5,7,9]
- print(binary_search(my_list, 7))
复制代码
现在这个函数应该可以正常工作了。如果输入的item在列表中,函数将返回item的索引;如果item不在列表中,函数将返回None。 |
|