二分查找适用条件:
数据是有序的;
数据是连续、顺序存储的,也即:存储形式为数组;
更适合于大规模静态数据(无频繁增删);
二分查找基本思想:
针对数组A,待查找元素value,设定low、high分别为数组头尾下标;
1. 令mid = (low+high)//2;
2. 若A[mid] == value,则返回mid,否则:
2.1. 若value<A[mid],high = mid-1;
2.2. 若value>A[mid],low = mid+1;
3. 直到low<=high,退出;
可见,二分查找的时间复杂度为:,属于十分高效的一种查找算法,试想,对于一个约四十多亿个数据,最多只需32次查找即可找到想要的数字所在位置。
Python代码:
def biSearch(A, value):
low, high = 0,len(A)-1
while low <= high:
mid = low+((high-low)>>1)
if value == A[mid]:
return mid
elif value < A[mid]:
high = mid - 1
elif value > A[mid]:
low = mid + 1
return -1
A = [1,2,3,4,5,6,7,8,9]
value = 3
print("待查找数字%d在数组中的下标为:%d"%(value,biSearch(A,value)))
# 待查找数字3在数组中的下标为:2