Python-二分查找

二分查找,每次能够排除一半的数据,查找的效率非常高,但是局限性比较大,必须是有序序列才可以使用二分查找

for查找数字

lst=[22,33,44,55,66,77,88,99,101,238,345,456,567,678,789]
n=46

for el in lst:
    if el==n:#0(n)
        print('找到了') #他会从头找到尾
        break
    else:
        print('没有')

这样他会从头找到尾,消耗时间与资源

使用二分法(必须有序)数据量越大,效率越高

lst=[22,33,44,55,66,77,88,99,101,238,345,456,567,678,789]
n=33

left=0
right=len(lst)-1

while left<=right: #边界,当右边比左边还小的时候推出
    mid=int((left+right)/2) #必须是整除,因为索引没有小数
    if lst[mid] > n:
        right = mid -1
    if lst[mid]

递归完成二分法

递归方法

lst=[22,33,44,55,66,77,88,99,101,238,345,456,567,678,789]
def func(n,left,right):
    if left<=right:
        mid=(left+right)//2
        if n > lst[mid]:
            left=mid+1
            func(n,left,right)  #递归,递归的入口
        if n

把找到的结果找出来


lst=[22,33,44,55,66,77,88,99,101,238,345,456,567,678,789]
def func(n,left,right):
    if left<=right:
        mid=(left+right)//2
        if n > lst[mid]:
            left=mid+1
            #函数的返回值返回给调用者
            return func(n,left,right)  #递归,递归的入口
        if n

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