对于二分查找发大家都很熟悉。就是对于一组有序的数每一次取出它的中间值,直到找到那个数或者循环结束。
下边给出循环和递归两种Python代码。
循环1:
n=100
a=range(n)
target=33
def two(l,r,target):
i=0
while l<=r:
mid = (l + r) / 2
i+=1
if a[mid] == target:
print i
return True
else:
if a[mid] > target:
r= mid-1
else:
l= mid+1
return False
print two(0,n-1,target)
循环2:
a=[1,2,3,4,5,6,7,8,9]
def twosearch(data,target):
l=0
r=len(data)-1
while l<=r:
mid = (l+r)//2
if data[mid]==target:
return True
if data[mid]> target:
r=mid-1
else:
l=mid+1
return False
print(twosearch(a,9))
递归:
n=100
a=range(n)
target=33
def two2(l, r, target):
i = 0
mid = l + (r-l) / 2
print a[mid]
if a[mid] == target:
return True
else:
if a[mid] > target:
r = mid - 1
return two2(l, r, target)
else:
l = mid + 1
return two2(l, r, target)
print two2(0,n-1,target)
参考文献: