Python数据结构与算法11——二分法查找
2019-09-26 本文已影响0人
皮皮大
二分查找
折半查找,比较次数少,速度快,只能作用于有序数组和顺序表
- 最优时间复杂度:
- 最坏时间复杂度:
代码实现
# coding: utf-8
def binary_search(alist, item):
# 二分查找,递归版本
n = len(alist)
# 只有if条件才能进行操作
if n > 0:
mid = n // 2
if alist[mid] == item:
return True
elif item < alist[mid]:
# item在左边部分继续查找
return binary_search(alist[:mid], item)
else:
# 右边继续查找
return binary_search(alist[mid+1:], item)
return False
# 非递归二分查找
def binary_search2(alist, item):
# 非递归
n = len(alist)
first = 0
last = n-1
while first <= last:
mid = (first + last) // 2
if alist[mid] == item:
return True
# 下面的语句只是将搜索的范围缩小
elif item < alist[mid]:
last = mid - 1
else:
first = mid + 1
return False
if __name__ == "__main__":
li = [1, 3, 4, 6, 7 ,8 ,9, 10, 17]
print(binary_search(li, 8))
print(binary_search(li, 88))
print(binary_search2(li, 8))
print(binary_search2(li, 88))