在一个有序序列alist 中查找某个元素item,则可以让item首先和alist 的中间元素比较:
如果相等,则成功;
如果小于中间元素,则在alist 的左半区间查找;
如果大于等于中间元素,则在alist 的右边半区间查找。
如图所示,是在一个有序序列中查找25 的过程。
以上查找过程是利用一个循环迭代过程,通过不断更新区间的左右位置L、H 和中间位置Middle这3 个指示器来查找。程序如下:
def binarySearch(alist, value):
L = 0 #区间左端点
H = len(alist)-1 #区间右端点
found =False
while L<=H:
Middle = (L+H)//2 #Middle 指向区间的中点
if alist[Middle] == value: #等于Middle 指向的元素,找到了
return Middle
else:
if value < alist[Middle]:
H = Middle-1 #在左区间查找
else:
L = Middle+1 #在右区间查找
return -1
testlist = [5,7,12,25,34,37,43,46,58,80,82,105]
print(binarySearch(testlist, 25))
print(binarySearch(testlist, 13))
输出:
3
-1
表明在位置3找到了25,在列表中没有13这个数值