數據結構與算法(十三):二分查找

二分查找適用條件:

數據是有序的;

數據是連續、順序存儲的,也即:存儲形式爲數組;

更適合於大規模靜態數據(無頻繁增刪);

二分查找基本思想:

針對數組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,退出;

可見,二分查找的時間複雜度爲:O(logn),屬於十分高效的一種查找算法,試想,對於一個2^{32}約四十多億個數據,最多隻需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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章