首页 > 编程语言 >Python数据结构与算法05——二分查找

Python数据结构与算法05——二分查找

时间:2024-02-25 21:23:11浏览次数:31  
标签:aimlist return 05 Python 元素 mid item 查找 数据结构

二分查找——递归版:

def binarySearch(aimlist, item):
    # 获取列表的长度
    n = len(aimlist)
    
    # 如果列表非空
    if n > 0:
        # 计算中间索引
        mid = n // 2
        
        # 如果中间元素是目标元素,则找到了
        if aimlist[mid] == item:
            return True
        # 如果中间元素小于目标元素,则在右半部分继续查找
        elif aimlist[mid] < item:
            # 递归调用并返回结果
            return binarySearch(aimlist[mid + 1:], item)
        # 如果中间元素大于目标元素,则在左半部分继续查找
        else:
            # 递归调用并返回结果
            return binarySearch(aimlist[:mid], item)
    else:
        # 列表为空,未找到目标元素
        return False

非递归:

def binarysearch(aimlist, item):
    # 获取列表的长度
    n = len(aimlist)
    
    # 初始化搜索范围的首尾索引
    first = 0
    last = n - 1
    
    # 在搜索范围内循环查找
    while first <= last:
        # 计算中间索引
        mid = (first + last) // 2
        
        # 如果中间元素是目标元素,则找到了
        if aimlist[mid] == item:
            return True
        # 如果中间元素小于目标元素,则在右半部分继续查找
        elif aimlist[mid] < item:
            first = mid + 1
        # 如果中间元素大于目标元素,则在左半部分继续查找
        else:
            last = mid - 1
    
    # 如果循环结束仍未找到目标元素,返回False
    return False

 

标签:aimlist,return,05,Python,元素,mid,item,查找,数据结构
From: https://www.cnblogs.com/yyyjw/p/18033080

相关文章

  • C++U6-05 - 动态规划算法入门
    目标:动态规划     兔子数列的每一项都是前两项之和,公式为f[n]=f[n−1]+f[n−2]。#include<bits/stdc++.h>usingnamespacestd;intmain(){intf[105],n;f[1]=1;f[2]=1;cin>>n;for(inti=3;i<=n;i++){......
  • C++U5-第05课-广度优先搜索2
    学习目标 广度优先搜索的思路复习 [【广度优先搜索(二)】图像渲染]  【题意分析】从需要上色的点开始,将所有与他相连接的点全部涂上相同的颜色【思路分析】我们从给定的起点开始,进行广度优先搜索。每次搜索到一个方格时,如果其与初始位置的方格颜色相同,就将该......
  • 加速Python代码的秘密武器,探索Cython的秘密
    首先和大家明确一下这个Cython单词的读法,这个单词Cython以前我也不知道怎么读,老后面要用到这个包的时候,老是不清楚读法,才去搜了下,这个单词是读"赛森",就是前面的cy是读"赛",后面的读法和python后一个读音thon一样。Cython是什么Cython是一个用于将Python代码转换为C或C++代码的编......
  • 测试工程师常用的python库
    大家好,今天给各位小伙伴带来的是测试工程师常用的10个python库,相信有些小伙伴肯定知道一些库,也使用过一些库。下面我们就来聊聊这常用的10个python库,我们主要介绍这些库和这些库的一些应用场景,方便没有接触过的小伙伴知道这些库的作用。个人认为以下10个库是测试工程师最常用的库......
  • 常用的Python代码片段(绘图)
    Proplot绘制具有经纬网的地图importproplotasppltimportcartopyfig,ax=pplt.subplots(proj=['cyl'],ncols=1,nrows=1)ax.add_feature(cartopy.feature.COASTLINE)ax.add_feature(cartopy.feature.BORDERS,linestyle=':',linewidth=0.5)ax.add_featu......
  • Python 相关知识-1
    1.Python内存泄漏和内存溢出是两种不同的问题,但它们都与内存管理有关.内存泄漏是指在使用动态分配的内存时,由于某些原因导致某些已分配的内存块无法被释放,从而使得程序占用的内存不断增加,最终导致内存耗尽。在Python中,内存泄漏可能由多种原因引起,例如全局变量、闭包、循环......
  • Python中生成器和迭代器的概念及两者区别
    本文详细介绍Python中生成器和迭代器的概念及两者区别。并通过一个案例分析两者在实际应用中的性能差异。 生成器生成器是一种特殊类型的迭代器,它使用函数和yield关键字定义,可以像普通函数一样调用和执行。生成器在每次迭代时产生一个值,并在下一次迭代时恢复执行。 在......
  • 【Python】 回文数的四种解法
    回文数就是指整数倒过来和原整数相等。1234Example1:  Input:121Output:true12345Example2:  Input:-121Output:falseExplanation:Fromlefttoright,itreads-121.Fromrighttoleft,itbecomes121-.Therefore......
  • python——面向对象——知识汇总
    面向对象技术简介类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。方法:类中定义的函数。类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。......
  • 05 锁
    数据库锁设计的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则的重要数据结构。全局锁对整个数据库实例加锁,之后其他线程的以下语句会被阻塞:数据更新语句(数据的增删改)、数据定义语句(包括建表......