我是python的新手,非常热衷于学习算法。 我已经为二进制搜索编写了示例代码,任何人都可以建议如何以更加pythonic的方式实现相同的结果(优化代码,或者如果可能的话使用Bisect)?
def bee_search(alist, target):
sort_list = sorted(alist)
while len(sort_list) >= 1:
end = len(sort_list)
middle = int((0 + end)/2)
if target == sort_list[middle]:
print "Found it", str(sort_list[middle])
break
elif target > sort_list[middle]:
sort_list = sort_list[middle:]
elif target < sort_list[middle]:
sort_list = sort_list[:middle]
else:
return "Fount it", str(sort_list[middle])
else:
print "List is Empty"
arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
bee_search(arr,15)
答案 0 :(得分:0)
这可能会回答你问题的一部分。你真的不需要获得中间索引,你可以将alist
中的最大值与target
进行比较:
def bee_search(alist, target):
largest = max(alist)
if target == largest:
print "Found", target
elif target < largest:
print"Found", target
else: # target > largest
print("Not found")
target == largest
和target > largest
时可以,但target < largest
时没有,是的,这是一个破碎的算法!
arr = [1,0,2,3, 10, 200, 5, 29, 10, 39, 109]
bee_search(arr, 30)
运行时,这是输出:Found 30
。
此问题也适用于您的算法,简单的比较无法明确告诉我们alist
是否具有整数30
的引用。您可能需要考虑变通方法,不要放弃。