最近的一次面视中,向侯选人提出来的一个问题,侯选人最后选择了一个常用办法,其实自己真实的想让他用递归的办法来做这一道题。自己也来回顾一下吧。
自己也需练练手了,开始写一些算法。
二分法:二分法查找,前提必须是数组要是有序的,如果所提供的数组是无序的,那就需要对数据先进行排序。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。
递归的方法:
def binary_search(alists,finditem):
#alists=alists.sort()
#print (alists)
n=len(alists)
if n==0:
print (False)
else:
mid= n//2
if (alists[mid]==finditem):
print (True)
elif (alists[mid]>finditem):
binary_search(alists[0:mid],finditem)
else:
binary_search(alists[mid+1:], finditem)
if __name__ =='__main__':
testlist = [0, 0, 4, 8, 15, 30, 39, 50, 66, 86, 95]
binary_search(testlist, 15)
binary_search(testlist, 100)
网友评论