一:二分法查找
思想:
1.假设表中元素是按照升序排列的,将表中间位置记录的关键字与查找的关键字进行对比,如果相等则查找成功;
2.否则利用中间位置记录将表分为前后两个字表,如果中间位置记录的关键字大于查找的关键字,则进一步查找前一字表,否则进一步查找后一字表。
3.重复以上过程,知道查找到满足条件的记录,或者知道字表不存在为止。
python代码实现:
(一):非递归实现:
def binary_search(list,item
):
first = 0
last = len(list)-1
while first<=last:
midpoint=(first+last)//2
if list[midpoint] == item:
return ture
elif item<list[midpoint]:
last=midpoint-1
else:
first=midpoint+1
return false
if __name__ =="__main__":
testlist = [0, 1, 2, 8, 13, 17, 19, 32, 42, ]
print(binary_search(testlist, 3))
(二):递归实现:
def binary_search(list, item):
if len(list)=0:
return false
else:
midpoint=len(list)//2
if list[midpoint] == item
return ture
else:
if item<list[midpoint]:
return binary_search(list[:midpoint],item)
else:
if item >list[midpoint]:
return binary_search(list[midpoint:],item)
if __name__ == "__main__":
testlist = [0, 1, 2, 8, 13, 17, 19, 32, 42, 100]
print(binary_search(testlist, 3))
print(binary_search(testlist, 13))