二分查找(有序序列)
2019-05-08 本文已影响0人
郭海杰
1.二分查找,递归
def test_search(alist, item):
n = len(alist)
if n > 0:
mid = n//2
if alist[mid] == item:
return True
elif item < alist[mid]:
return test_search(alist[:mid],item)
else:
return test_search(alist[mid+1:],item)
return False
#仅限用于有序序列
if __name__ == "__main__":
li = [12,13,14,15,16,17,18,19,20,21,22,23,24]
print(test_search(li, 30))
print(test_search(li, 13))
2.二分查找,非递归
def test_search(alist, item):
n = len(alist)
first = 0
last = n-1
while first <= last:
mid = (last + first)//2
if alist[mid] == item:
return True
elif item < alist[mid]:
last = mid - 1
else:
first = mid + 1
return False
#仅限用于有序序列
if __name__ == "__main__":
li = [12,13,14,15,16,17,18,19,20,21,22,23,24]
print(test_search(li, 30))
print(test_search(li, 13))