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

    针对有序的不重复数字的列表可以使用二分查找法

    l =[2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
    
    print(l.index(66))  #查询到66的索引
    
    index = 0       #for循环的方式查找66的索引
    for i in l:
        if i == 66:
            print(index)
        index += 1
    
    for i in range(len(l)): #for循环方法二
        if l[i] == 66:
            print(i)
    利用递归函数,通过二分查找方法去寻找目标值的索引
    list1=[1,2,4,5,11,67,7878,12228,158121]
    
    def get(num,list):
        if len(list) > 0:           #判定列表长度是否为空,不为空继续
            mid=len(list)//2        #将列表的长度切半,并取出长度
            if num > list[mid]:     #对比列表中间值,如果目标大于中间值,取值范围应该在列表二分后的左半部分
                list=list[mid+1:]   #为列表重新赋值为原列表的左半部分
            elif num < list[mid]:   #对比列表中间值,如果目标大于中间值,取值范围应该在列表二分后的右半部分
                list=list[:mid]     #为列表重新赋值为原列表的右半部分
            else:                   #对比列表的中间值,切好等于目标
                print("find it")    #大于find it,并且执行 return 结束函数
                return
            get(num,list)           #函数走到这里,如果没有return说明,目标没有找到,接下来调用自己后,变成了递归函数.继续执行函数
        else:
            print("not find")       #如果列表长度为空,说明目标不在列表中,打印("not find),结束函数
            return
    get(5,list1)
    l1 = [2,3,5,10,15,16]
    
    def two_search(l,aim,start=0,end=None):
        end = len(l) - 1 if end is None else end   #若end参数为默认值那么重新给end赋值为len(l)-1,否则end=end参数的值
        if end >= start:                           #判断end是否大于start,如果小于说明没有该值
            mid_index = (end - start) // 2 + start 
            if aim > l[mid_index]:
                return two_search(l,aim,start=mid_index+1,end=end)
            elif aim < l[mid_index]:
                return two_search(l,aim,start=start,end=mid_index-1)
            elif aim == l[mid_index]:
                return mid_index
            else:
                return '没有此值'
        else:
            return '没有此值'
    print(two_search(l1,5))
  • 相关阅读:
    《活在恩典中》第一章 人类的两难困境
    《真正的修行》把你内心的一切都呈现出来
    Mysql:Plugin:clone=mysql_clone:as of 8.0.17
    Mysql:--init-file && --init-connect
    Mysql:8.0.19:Upgrading Mysql:升级
    Android开发自定义View
    Android控制UI界面
    Android的视图(View)组件
    对Android应用签名
    Android Application的基本组件介绍
  • 原文地址:https://www.cnblogs.com/bailo/p/9162354.html
Copyright © 2011-2022 走看看