二分查找法
优点:比较次数少,查找速度快,平均性能好;
缺点:要求待查表为有序表,且插入删除困难。
使用场景:适用于不经常变动而查找频繁的有序列表
原理:假设要搜索的表中元素是按升序排列
a、将表中间位置记录的关键字与查找关键字比较
b、如果两者相等,则查找成功;
c、否则利用中间位置记录将表分成前、后两a个子表
d、如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。
e、重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功
def binary_search(alist, item):
if len(alist) == 0:
return False
else:
midpoint = len(alist)//2
if alist[midpoint]==item:
return True
else:
if item<alist[midpoint]:
return binary_search(alist[:midpoint],item)
else:
return binary_search(alist[midpoint+1:],item)