二分查找法

二分查找法

首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,
如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果
中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找
后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不
存在为止,此时查找不成功。-文字描述摘自360搜索,侵删

binary_search接受一个有序数组和一个待查找的元素

#二分查找法 O(logn)
#list:有序数组 item:要查找的元素
def binary_search(list,item):
    #记录开始查找的起始位置的索引
    low = 0
    #记录查找结束位置的索引
    high=len(list)-1
    while low<=high:
        #整除 // ,保证得到的数是一个整数
        #mid:记录数组中间位置的索引
         mid=(low+high) //2
        guess = list[mid]
        if guess < item :
            low = mid + 1
        elif guess > item:
            high = mid -1
        else:
            return mid
    return None
my_list = [143,21,31,44,5]
#index:查找的元素在数组中的位置,有则返回数字,无则返回none
index=binary_search(my_list,44)
print(index)
#结果是3

 

你可能感兴趣的:(算法)