搜索算法
二分查找(要求待查序列有序)
1.递归实现
1.判断中间值是否是待查数据
2.在前序列或后序列中递归查找
2.非递归实现
1.判断中间值是否是待查数据
2.向前或向后缩小范围重复步骤1
时间复杂度:O(logn)
def binary_serch(li,item):
# 二分查找(要求待查序列有序)
# 递归实现
n = len(li)
if n <= 0:
return False
# 判断中间值是否是待查数据
if item == li[n//2]:
return True
# 在前序列或后序列中递归查找
if li[n//2] > item:
return binary_serch(li[0:n//2],item)
else:
return binary_serch(li[n//2+1:],item)
def binary_search2(li,item):
# 非递归实现
n = len(li)
start = 0
end = n-1
while start <= end:
mid = (start + end)//2
# 判断中间值是否是待查数据
if item == li[mid]:
return True
# 向前或向后缩小范围重复步骤1
if item < li[mid]:
end = mid-1
else:
start = mid+1
return False
if __name__ == '__main__':
li = [0,2,5,6,8,9,11,16]
print(binary_serch(li, 17))
print(binary_search2(li,36))
print(binary_search2(li,8))
```