zoukankan      html  css  js  c++  java
  • day14 Python 二分法的三种实现

    一、使用循环实现二分法

    n = int(input("plz input your num: "))
    lst = [4, 56, 178, 253, 625, 1475, 2580, 3574, 15963]
    
    left = 0
    right = len(lst) - 1
    
    while left <= right:
        center = (left + right) // 2
        if n > lst[center]:
            left = center + 1
        elif n < lst[center]:
            right = center - 1
        else:
            print("I'am find it!")
            break
    else:
        print("it's not exist!")

    二、通过修改列表下标来实现二分法

    lst = [4, 56, 178, 253, 625, 1475, 2580, 3574, 15963]
    
    
    def findN(n, left=0, right=(len(lst) - 1), retry=0):
        center = (left + right) // 2
        print(f"search --> N:{n}, left:{left}, right:{right}, center:{center}, retry:{retry}")
        if left <= right:
            if n < lst[center]:
                right = center - 1
                retry += 1
                return findN(n, left, right, retry)
            elif n > lst[center]:
                retry += 1
                left = center + 1
                return findN(n, left, right, retry)
            else:
                print("I'am find it!")
                return True
        else:
            print("it's not exist!")
    
    print(findN(253))
    

    三、通过列表切片来实现二分法

    lst = [4, 56, 178, 253, 625, 1475, 2580, 3574, 15963]
    
    def findN(lst,n):
        center = len(lst) // 2
    
        if len(lst) > 0:
            if n > lst[center]:
                return findN(lst[center+1:],n)
            elif n < lst[center]:
                return findN(lst[:center],n)
            else:
                print(f"Num {n}, I'am find it!")
                return True
        else:
            print(f"Num {n}, It's not exist!")
    
    findN(lst,666)
    
  • 相关阅读:
    linux卸载rpm包
    Centos6.3手动rpm安装gcc,c++
    阿里云服务器挂载分区
    linux下svn目录管理
    mac搭建cordova的android环境
    mac下搭建cordova开发环境
    程序员除了写代码还可以做点啥
    php之soap使用
    linux中找不到/etc/sysconfig/iptables
    const 位置不一样导致的变化
  • 原文地址:https://www.cnblogs.com/fanghongbo/p/9911093.html
Copyright © 2011-2022 走看看