二分查找適用條件:
數據是有序的;
數據是連續、順序存儲的,也即:存儲形式爲數組;
更適合於大規模靜態數據(無頻繁增刪);
二分查找基本思想:
針對數組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