其二:使用递归法实现二分搜索

news2024/12/25 9:28:52

开篇

本文主要是利用递归法来实现一个简单的二分搜索程序。题目来源是《编程珠玑》第4章课后习题3。

问题概要

编写并验证一个递归的二分搜索程序, 并返回t在数组x[0…n-1]中第一次出现的位置。

思路分析

本题的思路与第一版相似,不过不同的是,为确保返回的t的索引为t在数组中第一次出现的位置,所以在查找到t后,要进一步的向左查找,看是否有其他的t的存在。

代码实现

#include <stdio.h>

int binary_search_plus(int x[], int l, int u, int t) {
	if (l > u) {
		return -1;
	}

	int m = (l + u) / 2;

	if (x[m] == t) {
		//
		while (m > 0 && x[m - 1] == t) {
			m--;
		}

		return m;
	}
	else if (x[m] < t) {
		return binary_search_plus(x, m + 1, u, t);
	}
	else {
		return binary_search_plus(x, l, m - 1, t);
	}
}

int main() {
	int x[]= { 2, 5, 7, 12, 18, 20, 24, 24, 24, 30 };
	int n = sizeof(x) / sizeof(x[0]);
	int t = 24;

	int result = binary_search_plus(x, 0, n - 1, t);

	if (result != -1) {
		printf("%d在数组中第一次出现的位置是%d.\n", t, result);
	}
	else {
		printf("%d不存在于数组中.\n", t);
	}

	return 0;
}

运行结果

运行结果截图

希望本文对您能有所帮助!
日拱一卒无有尽, 功不唐捐终入海。
共勉!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1704868.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android 通过布局生成图片

通过布局生成图片 首先效果图 在竖屏的情况下通过&#xff0c;一般情况下&#xff0c;只要布局在页面上可见&#xff0c;并显示全&#xff0c;通过布局生成图片&#xff0c;都可以&#xff0c;但是横屏就不行了&#xff0c;会出现图片显示不完全的情况。 val bitmap Bitmap.c…

KingbaseES数据库物理备份还原sys_rman

数据库版本&#xff1a;KingbaseES V008R006C008B0014 简介 sys_rman 是 KingbaseES 数据库中重要的物理备份还原工具&#xff0c;支持不同类型的全量备份、差异备份、增量备份&#xff0c;保证数据库在遇到故障时及时使用 sys_rman 来恢复到数据库先前状态。 文章目录如下 1.…

Laravel和ThinkPHP框架比较

一、开发体验与易用性比较 1. 代码可读性&#xff1a; - Laravel以其优雅的语法和良好的代码结构著称&#xff0c;使得代码更加易读易懂。 - 相比之下&#xff0c;ThinkPHP的代码可读性较为一般&#xff0c;在一些复杂业务场景下&#xff0c;可能会稍显混乱。 让您能够一站式…

【leetcode 141】环形链表——快慢指针(龟兔赛跑)

给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&#xff08;…

浙江大学数据结构MOOC-课后习题-第六讲-图2 Saving James Bond - Easy Version

题目汇总 浙江大学数据结构MOOC-课后习题-拼题A-代码分享-2024 题目描述 测试点 思路分享 ①解题思路概览 我的想法是&#xff0c;先建立一个图&#xff0c;然后再利用DFS或者BFS来遍历判断当前顶点能否跳到岸上去 ②怎么建图&#xff1f; 首先要考虑采用什么数据结构来存储图…

计算机网络导论

网络结构的演变 网状结构 最开始的网络&#xff0c;主机之间都是两两相连 好处 这样连接&#xff0c;好处是安全性比较高&#xff08;A与B之间的连线断了&#xff0c;可以绕一下C&#xff09;&#xff1b; 另外通信不需要互相等待&#xff08;没有中间交换设备&#xff0c;所…

yolov8+ROS+ubuntu18.04——学习记录

参考文献 1.Ubuntu配置Yolov8环境并训练自己的数据集 ROS实时运行 2.https://juejin.cn/post/7313979467965874214 前提&#xff1a; 1.CUDA和Anaconda&#xff0c;PyTorch 2.python>3.8 一、创建激活环境&#xff0c;安装依赖 1.创建虚拟环境 conda create -n yol…

【Qt Creator】跨平台的C++图形用户界面应用程序开发框架---QT

&#x1f341;你好&#xff0c;我是 RO-BERRY &#x1f4d7; 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f384;感谢你的陪伴与支持 &#xff0c;故事既有了开头&#xff0c;就要画上一个完美的句号&#xff0c;让我们一起加油 目录 1.互联网的核心岗位以及职…

一个基于预训练的DenseNet121模型的人脸年龄分类系统

这篇文章采用预训练的DenseNet121模型并使用自定义的数据集类和自定义的类似正态分布的标签平滑策略来训练了一个人脸年龄分类模型&#xff0c;最后基于这个模型用tk实现了一个娱乐向的小系统。 数据集展示&#xff1a; 两个文件夹&#xff0c;分别是训练集和测试集&#xff0…

空压机的热回收原理介绍

空压机运行时会产生大量的压缩热&#xff0c;通常这部分能量通过机组的风冷或水冷系统释放到大气当中。压缩机的热回收是持续降低空气系统损耗&#xff0c;提高客户生产力的必要手段。 余热回收的节能技术目前研究很多&#xff0c;但大多只针对喷油螺杆式空压机的油路改造而言…

【Linux】使用pip3安装pexpect,解决报错:the ssl module in Python is not available

pip3是python3的包管理工具&#xff0c;安装、卸载、更新等管理python包。 pexpect是其中一个python库&#xff0c;用于自动化与终端交互。 centos7使用pip3安装pexpect&#xff0c;报错&#xff1a; pip3 install pexpect 原因&#xff1a;使用python3解释器导入ssl库检查ss…

【网络协议】划重点啦!TCP与UDP的重点面试题!!!

1. 为什么建立TCP连接是三次握手&#xff0c;而关闭连接却是四次挥手呢&#xff1f; 这是因为服务端的 LISTEN 状态下的 SOCKET 当收到 SYN 报文的建连请求后&#xff0c;它可以把 ACK和 SYN&#xff08;ACK 起应答作用&#xff0c; 而 SYN 起同步作用&#xff09; 放在一个报文…

建立FTP服务器

文章目录 建立FTP服务器1. 使用VMware安装CentOS 7虚拟机。2. 安装完虚拟机后&#xff0c;进入虚拟机&#xff0c;修改网络配置&#xff08;onboot改为yes&#xff09;并重启网络服务&#xff0c;查看相应IP地址&#xff0c;并使用远程连接软件进行连接。3.配置yum源&#xff0…

图形学概述

图形学应用 游戏 游戏的画面好坏如何鉴定呢&#xff1f; 看游戏画面是否够亮&#xff1a;渲染中全局光照的好坏 《只狼》 为什么卡通游戏画面看起来是卡通的呢&#xff1f; 《无主之地3》 这些都是图形学需要着手解决的问题 电影 电影《黑客帝国》的特效也是通过计算机…

AI大模型探索之路-实战篇9:探究Agent智能数据分析平台的架构与功能

系列篇章&#x1f4a5; AI大模型探索之路-实战篇4&#xff1a;深入DB-GPT数据应用开发框架调研 AI大模型探索之路-实战篇5&#xff1a;探索Open Interpreter开放代码解释器调研 AI大模型探索之路-实战篇6&#xff1a;掌握Function Calling的详细流程 AI大模型探索之路-实战篇7…

OWASP top10--SQL注入(三、手工注入)

目录 access数据库 手工注入过程&#xff1a; 猜解数据库表名 猜解数据库表名里面的字段 猜解字段内容 SQL注入中的高级查询 mssql数据库 手工注入过程&#xff1a; sa权限 ​编辑dbowner权限 public权限 mysql数据库 1、对服务器文件进行读写操作(前提条件) 需要知…

二叉树顺序结构的实现(堆)

二叉树的基本概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 有一个特殊的结点&#xff0c;称为根结…

浙江大学数据结构MOOC-课后习题-第九讲-排序1 排序

题目汇总 浙江大学数据结构MOOC-课后习题-拼题A-代码分享-2024 题目描述 文章目录 冒泡排序插入排序希尔排序堆排序归并排序 冒泡排序 void buble_Sort() { int A[MAXSIZE];int N;std::cin >> N;for (int i 0; i < N; i)std::cin >> A[i];bool flag false;i…

滑动窗口-java

主要通过单调队列来解决滑动窗口问题&#xff0c;得到滑动窗口中元素的最大值和最小值。 目录 前言 一、滑动窗口 二、算法思路 1.滑动窗口 2.算法思路 3.代码详解 三、代码如下 1.代码如下 2.读入数据 3.代码运行结果 总结 前言 主要通过单调队列来解决滑动窗口问题&#xff…

(免费领源码)java#SSM#mysql第三方物流系统37852-计算机毕业设计项目选题推荐

摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&#xff0c;应用软件的工作…