• 二分查找


    ​二分查找:

    前提条件:

    二分查找只能在有序的列表内进行查找
    

    基本思想

    1. 在一个有序的列表内,查找你想要的数字.
    2. 先设定起始下标,与结束下标,然后取出中间下标的值
    3. 让中间坐标的值,与要查找的值进行比对
        1.如果中间值等于要查找的值,直接返回中间值
        2.如果中间值,小于要查找的值,那么将中间值的下标加一,作为下一次查找的起始下标
        3.如果中间值,大于要查找的值,那么将中间值的下标减一作为下一次查找的终止下标
    4. 按照此原理直到找到为止
    

     

    时间复杂度:

      顾名思义: 劈半查找, 每次只寻找当前序列的一半, 总会被劈成一个个长度为一的小序列, 此过程需要n步

      即: 时间复杂度 --> O(log2^n) --> (是以2为底,n的对数)-->  O(logn)

     

    精简版:

    def bin_search(data, find_num):
        first = 0
        last = len(data)-1
        while first <= last:
            mid = (first+last)//2
            if data[mid] == find_num:
                return mid
            if data[mid] < find_num:
                first = mid + 1
            if data[mid] > find_num:
                last = mid - 1
    View Code

    注释版:

    def bin_search(data, find_num):
        # 起始下标
        first = 0
        # 终止下标
        last = len(data)-1
        # 如果这个序列不为空就要一直查找
        while first <= last:
            # 设置中间下标,
            mid = (first+last)//2
            # 如果中间的数, 等于要查找的数, 返回这个数的下标
            if data[mid] == find_num:
                return mid
            # 如果中间的数, 小于要查找的数, 将中间数的下标加一, 作为下一步要查找的起始下标
            if data[mid] < find_num:
                first = mid + 1
            # 如果中间的数, 大于要查找的数, 将中间数的下标减一, 作为下一步要查找的末尾下标
            if data[mid] > find_num:
                last = mid - 1
    View Code

    递归版:

    def bin_search(data, find_num):
        first = 0
        last = len(data) - 1
        mid = (first + last) // 2
        if data[mid] == find_num:
            return mid
        elif data[mid] < find_num:
            bin_search(data, mid + 1, find_num)
        else:
            bin_search(data, first, mid - 1)
    View Code

     

  • 相关阅读:
    JetBrains全家桶破解-Golang-Pycharm-IDEA等-不分平台
    k8s node update kernel
    k8s 图解
    k8s孤儿卷的问题
    k8s相关工作中常用命令
    AMQ死信引发宕机的问题
    StackStorm简介之actions
    DRF 使用入门
    python装饰器的简单实用
    type和object的关系
  • 原文地址:https://www.cnblogs.com/amou/p/9058280.html
Copyright © 2020-2023  润新知