数据结构与算法(十三):二分查找

二分查找适用条件:

数据是有序的;

数据是连续、顺序存储的,也即:存储形式为数组;

更适合于大规模静态数据(无频繁增删);

二分查找基本思想:

针对数组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

猜你喜欢

转载自blog.csdn.net/oYeZhou/article/details/106142300