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

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

《算法导论》第三版 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... 阅读详情

相关推荐

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

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

qq_37357873的博客 468

FOFA奇技淫巧:从搜索语法到实战场景的深度挖掘

本文深入探讨了FOFA搜索语法在网络空间测绘中的高效应用,从基础语法到实战场景的深度挖掘。通过渗透测试、威胁狩猎、资产发现等实际案例,展示了如何利用FOFA精准定位目标系统、识别蜜罐、追踪威胁,并提供了合规使用指南和性能优化技巧,助力安全工作者提升效率。

weixin_32428571的博客 235

二分查找算法(非递归)

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

papillonlong的博客 416

R 绘制环形树状图

按大类小类的从属关系绘制环形图,并把不同值的节点设置为相应大小。要求同一类的节点应为同一颜色。 按照输入,处理代码和输出记录

weixin_43718786的博客 1872

(10)Proteus 8.9上的STM32仿真系列(HAL)---freertos

实验设计:通过cubemxide生成freertos工程,然后创建一个 pc13 led灯间隔200ms闪烁的任务。非常遗憾的是proteus8.9仿真失败,实物上没有问题,但还是把流程过一遍。 一、原理图 实物是淘宝上stm32f103 c8t6的核心板,proteus上没有这个芯片,这里图上大概表示一下,用的是核心板自带的pc13引脚的led灯。 二、cubemxide配置 1.RCC如之前工程一样配置 2、配置SYS timebase Source不要使用systick,自己选择一个定时器,我这

qq_35442550的博客 7342

二分查找非递归算法

一算法说明 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

ZBrush 2021来了

这次给大家带来的是:zbrush2021.1.1 win安装教程 1.下载压缩包之后解压到文件夹当中,然后打开ZBrush_2021_Installer.exe进行软件安装, 如下图 2.在这里我们保持默认的简体中文版即可,然后点击确认,如下图 3.第三步我们点击前进即可,如下图 4.第四步我们来到许可协议,在这里我们点击我接受此协议,然后点击前进,如下图 5.第五步我们来到安装目录,在这里我们可以设置安装路径,如下图 6.在这里我将安装目录修改安装到E盘为例,然后点击下一

3D游戏建模 1187

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

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

qq_54731568的博客 609

Wafer的T7 Code是什么,怎么来的

在半导体Cim系统中,waferstart 业务需要支持 Sorter 读取 Wafer 的 T7 Code,与 MES 的 Wafer ID 进行绑定,以便向 前追溯 Wafer 历史,那么问题来了,T7code 是什么Wafer的T7 Code是一种,用于标识双面抛光的晶圆。这种标记采用二维矩阵代码符号,适用于各种尺寸的晶圆,不仅限于450mm无缺口晶圆7。T7 Code是衬底来料背面通常会有的供应商刻的追溯ID,这是一串数字和字母组成的流水码。

阿拉伯梳子的专栏 7923

【Zephyr存储专题】09_LittleFs文件系统操作

本文档旨在为开发者介绍Zephyr下Littlef's文件系统相关配置使用指南

zero的博客 3246

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

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

lu_long的博客 446

Tmux学习总结

Tmux 重要概念 使用 Tmux 的时候千万不要去背指令,所有的指令都可以在 .tmux.conf 配置文件中绑定自己顺手的快捷键,也可以配置开启鼠标。 这个是我的配置文件:https://github.com/zuorn/tmux.conf 在Tmux逻辑中,需要分清楚Server > Session > Window > Pane这个大小和层级顺序是极其重要的,直接关系到工作效率: Server:是整个tmux的后台服务。有时候更改配置不生效,就要使用tmux kill-

满目星辰 577

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

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

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

兰亭风雨的专栏 4788

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

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

递归算法实现二分查找

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

wyd_333的博客 7652

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

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、付费专栏及课程。

余额充值