二分查找算法的递归与非递归实现

二分查找算法递归实现 二分查找算法个人总结 阅读详情

《算法导论》第三版 P22,2.3-5练习题
递归实现

list1 = [1,2,3,4,5,6,7,8,9,10];
count = len(list1);

def rbs(list0, start, end, a):
    mid = (int)((start + end) / 2);
    if a == list0[mid]:
        return mid
    if start == mid and mid == end:
        return -1
    index1 = rbs(list0, start, mid - 1);
    index2 = rbs(list0, mid + 1, end);

    if index1 == -1:
        return index2
    else:
        return index1

print("Index of 5 is:");
print(rbs(list1, 0, count - 1, 5));

非递归实现

list1 = [1,2,3,4,5,6,7,8,9,10];
count = len(list1);
stack = []

def bs(list0, start, end, a):
    while(True):
        mid = (int)((start + end) / 2)
        if a == list0[mid]:
            return mid
        if start == mid and mid == end:
            if len(stack) == 0:
                return -1
            else:
                start = stack.pop(0)
                end = stack.pop(0)
                mid = -1

        if mid != -1:
            stack.append(mid + 1)
            stack.append(end)
            end = mid

print("Index of 5 is:");
print(bs(list1, 0, count - 1, 5));

注:单递归改成非递归,用循环就能解决;双递归改成非递归,除了用循环之外,还要借助栈或者队列。

作者:李印臣,2005年毕业于山东师范大学计算机系,曾三次患有精神分裂症。康复后,做了近四年的软件工程师,然后做了两年精神分裂症领域的公益,现重新回到软件行业,一切从头再开始!
愿这个博客见证我的成长与进步。

二分查找算法--递归式与非递归式两种方式实现 二分查找法是将数据折半,小于中间值就找小于中间值区间的数据,大于中间值就找大于中间值区间的数据,这样就大大的增加了效率,可以更快速的查找到指定数据,就是缺点必须是有序的,但是现在实现排序很方便也很高效倒也不是瓶颈,无序的话二分查找也体现不了其意义所在,那么接下来就详细讲解二分查找 1.二分查找概念 二分查找实际上是不断地将有序数据集进行对半分割,并检查每个分区地中间元素。 2... 阅读详情

相关推荐

CSP-J 初赛模拟卷1 题解

只有一棵子树有后继,其他的都是叶结点才能保证树的深度最大,此时还剩(n-5)个结点,最后加上2,得到(n-3),即为答案。题解:先修改p的指针域,让它的左指针域指向q,然后再让q的右指针域赋值给p的右指针域,再然后修改q的右指针域使其指向p,最后需要改变的指针域就是原先q结点的后继节点的左指针域内容。设n个元素的入栈序列是1,2,3,...,n,出栈序列为p1,p2,...,pn,若p1=n,则pi(1≤i≤n)的值为(1)输入的三个数中,第二个数应是[0,11]上的整数,否则会出现数组越界的问题。

Sat77GryHp_Pro的博客 2805

分治法-归并/快排(递归)-二分(非递归)

这里写目录标题分治法1.最大连续和问题2.归并排序逆序对问题3.快速排序 很多题目可以用暴力枚举法求解,比如1~n的全排列,可重复数字的全排列,8皇后问题等但是需要注意,当时间复杂度超过10910^9109一般就超时了,所以如果数量级为10510^5105及以上,时间复杂度为O(n)O(n)O(n)肯定就超时了,就考虑分治、贪心、动态规划等高级算法 分治法 分治法分成三个步骤,通常第三步是最难确定的:    划分问题    递归求解    合并问题 同时注意定义递归的终止条件,例如对区间[x,y)[x,y

qq_37357873的博客 468

【Python爬虫案例教学】超简洁代码采集原神所有角色信息

(。・∀・)ノ゙嗨 大家好,这里是池鱼

xiaoyuan_____的博客 2419

二分查找算法(非递归)

数组 {1,3, 8, 10, 11, 67, 100}, 编程实现二分查找, 要求使用非递归的方式完成.2.二分查找算法(非递归)代码实现。1.二分查找算法(非递归)介绍。

papillonlong的博客 416

SVA学习笔记(1)——property基本语法及巧用define与property

巧用define与property,让代码更加灵活

craftsman2018ship的博客 1573

通达信大单资金实时监控与播报插件:股票分析的实用利器——大红球

本文介绍了一款专为通达信软件设计的大单资金实时监控与播报插件,该插件以其傻瓜式操作和入门级特性在股民中广受欢迎。插件核心功能包括与通达信版面的无缝联动、大单金额范围的自定义设置、资金流动的可视化展示以及智能声音播报等。其技术架构基于本地网页形式,自带分时图显示功能,数据实时更新且无需L2账户,承诺永久免费升级。插件通过红绿球的大小和颜色直观展示资金规模与买卖方向,顶端全局统计功能提供宏观资金流动分析。尽管插件数据具有较高参考价值,但投资者仍需结合其他因素进行综合判断。插件界面可自适应调整,提供个性化使用体验

guleba的博客 6589

二分查找非递归算法

一算法说明 1 二分查找可以使用递归的方式,也可以使用非递归的方式。 2 二分查找法只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后再进行查找。 3 二分查找法的运行时间为对数时间O(㏒₂n) ,即查找到需要的目标位置最多只需要㏒₂n步,假设从[0,99]的队列(100个数,即n=100)中寻到目标数30,则需要查找步数为㏒₂100 , 即最多需要查找7次( 2^6 < 100 < 2^7)。 二 实战 1要求 数组{1,3, 8, 10, 11, 67, 100..

实践求真知 2403

Codex 接入国产大模型指南:客户端与 CLI 双端实战

CC Switch是目前最流行的 Codex / Claude Code 模型切换工具,内置了协议转换功能,支持几乎所有主流国产模型。核心原理Codex → 本地 8317 端口(CC Switch)→ 协议转换 → 国产模型 API整个过程对 Codex 完全透明,Codex 以为自己在跟标准的 Responses API 对话。用户类型推荐方案理由新手 / 不想折腾配置简单,免费额度够用追求稳定体验通义千问(原生接入)官方兼容,功能最完整企业用户自建 AI 网关可控性强,支持多用户管理预算有限。

篮球界最会写bug的人;程序猿中打球最菜的人。 573

二分查找——递归+非递归实现(c语言)

给定n个从小到大排好序的整数序列Data[]以及待查找整数X,找到X在Data[]中的下标。若Data[i]=X,则返回i,否则返回师表标志NotFound。若XData[Mid],则在右边的子序列中查找X。现在找到序列的中点Data[Mid],与X进行比较。若相等则返回中点下标Mid。

qq_54731568的博客 609

YOLOv8与Swin Transformer的完美结合:如何提升目标检测的精度与速度

Swin Transformer(Shifted Window Transformer)是一种新型的视觉Transformer架构,采用了局部窗口(Window)和局部窗口偏移(Shifted Window)的策略,极大减少了计算复杂度,同时保持了全局感知能力。局部窗口注意力:每个窗口内的元素进行自注意力计算,减少计算量。窗口偏移:通过在不同层次引入窗口偏移,增强了全局信息的交互。层级设计:通过堆叠多个层次的模块,逐渐捕捉不同尺度的特征。

shrgegrb的博客 2151

大数据知识面试题-Hadoop(2022版)

序列号 内容 链接 1 大数据知识面试题-通用(2022版) 待续… 2 大数据知识面试题-Hadoop(2022版) 待续… 3 大数据知识面试题-MapReduce和yarn(2022版) 待续… 4 大数据知识面试题-Zookeepr (2022版) 待续… 5 大数据知识面试题-Hive (2022版) 待续… 6 大数据知识面试题-Flume(2022版) 待续… 7 大数据知识面试题-Hbase(2022版) 待续… 8 大数据知识面试题-sqoop(....

拉格朗日的学习笔记 1万+

常用算法——二分查找(非递归)

二分查找(非递归) 基本介绍 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。 首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则...

lu_long的博客 446

AI工具赋能日常工作的实践指南:以产品经理与程序员为例

AI工具赋能日常工作的实践指南:以产品经理与程序员为例

专注于编程、AI、人工智能等多个领域内容研究和分析 591

python递归实现二分查找_python二分查找算法的递归实现

本文实例讲述了python二分查找算法的递归实现方法。分享给大家供大家参考,具体如下:这里先提供一段二分查找的代码:def binarySearch(alist, item):first = 0last =len(alist)-1found = Falsewhile first lst[mid]: #找后半部分#print(lst[mid:])returnbinSearch(lst[mid:], ...

weixin_39865440的博客 877

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【算法拾遗】二分查找递归非递归实现

本篇博文没太多要说的,二分查找很简单,也是常见常考的查找算法,一下是递归非递归的实现。 非递归实现:

兰亭风雨的专栏 4788

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

递归算法实现二分查找

递归函数实现二分查找代码呈现

wyd_333的博客 7652

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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]你观察这个列表,这是不是一个从小到大排序的有序列表呀?如果这样,假如我要找的数比列表中间的数还大,是不是我直接在列表的后半边找就行了?这就是二分查找算法!那么落实到代码上我们应该怎么实现呢?简单版二分法l = [2,3,5,10,15...

weixin_39760857的博客 1050

二分查找算法递归和非递归实现(C++)

二分查找算法代码: #include using namespace std; //非递归实现 int FindElement(int a[],int first,int end,int target) { int mid,value; int L=first,R=end; while(L<R) { mid=(L

小博客 5026

二分查找算法的递归与非递归实现(C++)

二分查找又称折半查找, 首先, 假设表中元素是按升序排列, 将 表中间位置的关键字与查找关键字比较: 如果两者相等, 则查找成功; 否则利用中间位置将表分成前、 后两个子表: 如果中间位置的关键字大于查找关键字, 则进一步查找前一子表 否则进一步查找后一子表 重复以上过程, 直到找到满足条件的记录, 使查找成功, 或直到子表不存 在为止, 此时查找不成功。 二分查找算法的递归实现 //...

weixin_45801057的博客 520

python递归实现二分查找算法_python--递归、二分查找算法

递归初识递归递归的定义——在一个函数里再调用这个函数本身现在我们已经大概知道刚刚讲的story函数做了什么,就是在一个函数里再调用这个函数本身,这种魔性的使用函数的方式就叫做递归。刚刚我们就已经写了一个最简单的递归函数。递归的最大深度——997正如你们刚刚看到的,递归函数如果不受到外力的阻止会一直执行下去。但是我们之前已经说过关于函数调用的问题,每一次函数调用都会产生一个属于它自己的名称空间,如果...

weixin_39603327的博客 412

Java递归实现二分查找算法

Java递归实现二分查找算法 二分查找即在一个排好序的数列中查找指定的数,把一个数列分成两部分,对中间的数与要查找的数比较,如果相等就退出算法得到该数的下标,如果大于要比较的数就往前移继续分成两半再比较,如果小于则往后移,以此类推。 import java.util.Scanner; //Exception in thread "main" java.lang.StackOverflowErro...

jiangchengchenga的博客 1311

Java实现二分查找算法(非递归)

14.1 二分查找算法(非递归) 14.1.1 二分查找算法(非递归)介绍 之前发过二分查找算法,是使用递归的方式,下面我们用二分查找算法的非递归方式 二分查找法只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后再进行查找 二分查找法的运行时间为对数时间 O(㏒₂n) ,即查找到需要的目标位置最多只需要㏒₂n 步,假设从[0,99]的队列(100 个数,即 n=100)中寻到目标数 30,则需要查找步数为㏒₂100 , 即最多需要查找 7 次( 2^6 < 100 < 2^7)

当一个合格的软件工程师 2764

二分查找的递归和非递归算法(C语言实现),【算法拾遗】二分查找递归非递归实现...

本篇博文没太多要说的,二分查找非常easy,也是常见常考的查找算法,下面是递归非递归的实现。非递归实现:/*非递归实现,返回相应的序号*/int BinarySearch(int *arr,int len,int key){if(arr==NULL || len<1)return -1;int low = 0;int high = len-1;while(low <= high){in...

weixin_33641311的博客 388
上一篇: 用递归实现插入排序
下一篇: 确定集合中是否存在两个其和刚好为X的元素?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值