初见

二分查找

2020-06-15  本文已影响0人  足__迹

二分法

二分法是一种快速查找的方法,时间复杂度低,逻辑简单易懂,总的来说就是不断的除以2除以2...
例如需要查找有序list里面的某个关键字key的位置,那么首先确认list的中位数mid,下面分为三种情况:
如果 list[mid] < key,说明key 在中位数的 右边;
如果 list[mid] > key,说明key 在中位数的 左边;
如果 list[mid] = key,说明key 在中位数的中间;
范围每次缩小一半,写个while的死循环知道找到为止。

二分法查找非常快且非常常用,但是唯一要求是要求数组是有序的

def binary_aearch(list, num):
    """
    接受有序数组和一个元素,返回这个元素的位置
    """
    lef = 0
    right = len(list) - 1  # 获取列表最后一位数据
    print('左边界{}右边界{}'.format(lef,right) )
    while lef <= right:
        mid = (lef + right) // 2   # 如果(lef + right)不是偶数,python会自动向下取整
        guess = list[int(mid)]   
        if guess == num:     # 找到了元素
            return mid
        elif guess > num:    # 预期结果大于实际结果
            right = mid - 1
        elif guess < num:    # 预期结果小鱼实际结果
            lef = mid + 1
    return None

def 



if __name__ == "__main__":

    my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    print(binary_aearch(my_list, 7))

原理:原理为一个数的平方根一定在,0到这个数之间,那么就对这之间的数,进行二分遍历

def get_square(num):
    """
    num : 输入的数据
    return : 返回数据次方根
    """
    lef = 0
    right = int(num)
    print('左边界{}右边界{}'.format(lef,right) )
    while lef <= right:
        mid = (lef + right) // 2   # 如果(lef + right)不是偶数,python会自动向下取整
        if  num == 2 ** mid :   
             return mid
        elif 2**mid > num:
              right = mid - 1
        else:
              lef = mid + 1
    return None

上一篇 下一篇

猜你喜欢

热点阅读