二分查找

算法思想

算法:当数据量很大适宜采用该方法。采用二分法查找时,数据需是排好序的。
基本思想:假设数据是按升序排序的,对于给定值n,从序列的中间位置mid开始比较,
如果当前位置li[n]值等于mid,则查找成功;
若mid小于当前位置值li[n],则在数列的前半段中查找,li[left,mid-1];
若mid大于当前位置值li[n],则在数列的后半段中继续查找arr[mid+1,right],
递归,是在函数中自身调用自身的一种情况,直到有一个明确的退出条件成立后结束相互调用。递归是一种很容易理解某类问题的方式,但是不是特别高效,因为每次调用自身时,都会在内存中创建一个新的内存空间,当不断循环调用非常多次时,是非常耗内存的。
目的:选择一个数,寻找他的位置

代码实现:

li=[1, 4, 5, 78,156, 178,180, 199]
low=0
hight=len(li)-1

def binary_search(li, target, low, hight):
    while low <= hight:
        mid = (low + hight) // 2
        if target < li[mid]:
            hight = mid - 1
        elif target > li[mid]:
            low = mid + 1
        else:
            print(mid)
            break
    else:
        print("没有这个数")

binary_search(li,1,low,hight)

# 递归法
# def binary_search(li,target,low,hight):
#     if low>hight:
#         return False
#     else:
#         mid=(low+hight)//2
#         if target ==li[mid]:
#             return mid+1
#         elif target < li[mid]:
#             return binary_search(li,target,low,mid-1)
#         else:
#             return binary_search(li,target,mid+1,hight)

# print(binary_search(li,156,low,hight))

你可能感兴趣的:(二分查找)