zoukankan      html  css  js  c++  java
  • 二分查找

    ​二分查找:

    前提条件:

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

    基本思想

    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

     

  • 相关阅读:
    .Net 集合类
    Linux与Windows共享资源samba+mount
    Linux系统基本设置
    python实例31[urllib.request.urlopen获取股票信息]
    iptables 基本命令使用举例
    API控制VM虚拟机(VM Workstation or VM Server)
    vbs实现unicode和ascii的转化
    python语法31[string的print和format]
    Windows下运行XServer
    Perl IDE之Perl Express和Eclipse+EPIC+PadWalker
  • 原文地址:https://www.cnblogs.com/amou/p/9058280.html
Copyright © 2011-2022 走看看