二分查找

作者: 足__迹 | 来源:发表于2020-06-15 00:16 被阅读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
    
    

    相关文章

      网友评论

        本文标题:二分查找

        本文链接:https://www.haomeiwen.com/subject/busbuhtx.html