帮我看看以下代码为啥不对def binary_search(alist,item): n = len(alist) if n>0: mid = n//2 if alist[mid]==item: return True elif item < alist[mid]: return binary_search(alist[:mid],item) else: return binary_search(alist[mid+1:],item) return False nums=[14,15,36,54,7,5,9,2,4,6] num=int(54) a=binary_search(nums,54) print(a)
时间: 2024-03-04 13:50:33 浏览: 110
这个代码的问题在于,当传入的列表不是有序的时候,二分查找算法并不能正确地返回结果。在这个例子中,列表 `nums` 并没有被排序,因此算法无法找到目标数字。
要使用二分查找算法,必须先对列表进行排序。可以使用 Python 内置的 `sorted()` 函数进行排序,或者使用其他排序算法。在对列表排序后,再调用 `binary_search()` 函数,就可以正确地找到目标数字了。
相关问题
检查代码并修改:def BinarySearch(alist,item): index = len(alist) if index == 0: return False else: midpoint = index // 2 if alist[index] == item: return True else: if alist[midpoint] != item: return binarySearch(alist,item)
修改后的代码如下:
def binarySearch(alist, item):
index = len(alist)
if index == 0:
return False
else:
midpoint = index // 2
if alist[midpoint] == item:
return True
else:
if item < alist[midpoint]:
return binarySearch(alist[:midpoint], item)
else:
return binarySearch(alist[midpoint+1:], item)
这是一个递归实现的二分查找算法,原代码中有几个错误,已经进行了修正。
修改二分查找法的递归程序(binarySearch.py),设法从命令行参数中荻 取测试列表的各元素以及所要查找的关键字def _binarySearch(key,a,io,hi): if hi <=io:return (-1) mid=(io+hi)//2 if a[mid]>key: return _binarySearch(key,a,io,mid) elif a[mid]<key: return _binarySearch(key,a,mid+1,hi) else: return mid def binarySearch(key,a): return _binarySearch(key,a,0,len(a)) #测试代码 def main(): a=[1,13,26,33,45,55,68,72,83,99] print("关键字位于列表索引",binarySearch(33,a)) print("关键字位于列表索引",binarySearch(58,a)) if __name__=='__main__':main()
以下是修改后的代码(binarySearch_updated.py),可以从命令行参数中获取测试列表和所要查找的关键字:
```python
import sys
def _binarySearch(key, a, io, hi):
if hi <= io:
return -1
mid = (io + hi) // 2
if a[mid] > key:
return _binarySearch(key, a, io, mid)
elif a[mid] < key:
return _binarySearch(key, a, mid + 1, hi)
else:
return mid
def binarySearch(key, a):
return _binarySearch(key, a, 0, len(a))
# 从命令行参数中获取测试列表和所要查找的关键字
test_list = list(map(int, sys.argv[1:-1]))
key = int(sys.argv[-1])
# 在测试列表中查找关键字
result = binarySearch(key, test_list)
if result != -1:
print(f"元素在索引{result}位置")
else:
print("元素不在列表中")
```
使用方法:
在命令行中输入以下命令:
```
python binarySearch_updated.py 1 2 3 4 5 6 7 8 9 10 5
```
其中,`1 2 3 4 5 6 7 8 9 10` 是测试列表的各元素,`5` 是所要查找的关键字。程序将输出:`元素在索引4位置`。
阅读全文
相关推荐
















