二分搜索法

给定已经按照升序排好序的n个元素A[0,n-1],现要在这n个元素中找出一特定元素x

1.此时数组A是排好序的,我们要根据二分法来找出x,先将数组分成两部分,数组的开始left,数组的结束right,中间位置为mid.此时数组的左边部分为A[left,mid-1],右边部分为A[mid+1,right].

int mid=(left+right)/2;//中间元素为A[mid]

2.判断我们要找的元素x是否等于中间的元素A[mid],如果等于则不用再往下找了,此时直接返回mid的值(返回该特点元素x在数组中的位置)。

if(x==A[mid]){return mid;}

3.若我们找的元素x小于中间元素A[mid]的值,那结果应该在左边部分的数组中

if(x<A[mid]){
  binarySearch(A,x,left,mid-1);//若x小于A[mid],在数组左边区域,再次调用二分函数查找左边部分是否有等于x的值
} 

4.若我们找的元素x大于中间元素A[mid]的值,那结果应在右边部分的数组中

if(x>A[mid]){
  binarySearch(A,x,mid+1,right);//若x>A[mid],则利用二分法在右边部分的数组进行查找。
}

5.若查找到right<left时,则此时该元素并未存在(找不到)

if(right<left){
  return -1;
}

完整代码:

#include<stdio.h>
#include<malloc.h>
//二分搜索

int binarySearch(int A[],int &x,int left,int right) {
	if (right >= left) {
		int mid = (left + right) / 2;
		if (x == A[mid]) {
			return mid;
		}
		else if (x < A[mid]) {
			binarySearch(A, x, left, mid - 1);
		}
		else {
			binarySearch(A, x, mid + 1, right);
		}
	}
	else {
		return -1;
	}
}

int main() {
	int n,x;
	printf("请输入数组长度:");
	scanf_s("%d",&n);
	int* A=(int*)malloc(sizeof(int) * n);
	printf("请输入数组数据:");
	for (int i = 0; i < n;i++) {
		scanf_s("%d",&A[i]);
	}
	printf("请输入你要查找的数据:");
	scanf_s("%d",&x);
	int result=binarySearch(A,x,0,n-1);
	if (result>=0) {
		printf("查找结果在数组中的第%d个位置", result+1);
	}
	else {
		printf("未找到!");
	}

	return 0;
}

上面代码可以键盘输入数组的值,当然也可以直接确定A中的元素:

#include<stdio.h>
#include<malloc.h>
//二分搜索

int binarySearch(int A[],int &x,int left,int right) {
	if (right >= left) {
		int mid = (left + right) / 2;
		if (x == A[mid]) {
			return mid;
		}
		else if (x < A[mid]) {
			binarySearch(A, x, left, mid - 1);
		}
		else {
			binarySearch(A, x, mid + 1, right);
		}
	}
	else {
		return -1;
	}
}

int main() {
	int x;
    int A[5]={1,2,3,4,5};
	printf("请输入你要查找的数据:");
	scanf_s("%d",&x);
	int result=binarySearch(A,x,0,n-1);
	if (result>=0) {
		printf("查找结果在数组中的第%d个位置", result+1);
	}
	else {
		printf("未找到!");
	}

	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

短视频矩阵营销系统 poihuoqu 任意文件读取漏洞复现

0x01 产品简介 短视频矩阵营销系统是由北京华益云数据科技有限公司开发的一款产品,这家公司专注于抖音短视频矩阵营销系统的研发,致力于为企业提供全方位的短视频营销解决方案。华益云抖销短视频矩阵系统可以帮助企业快速搭建多个短视频账号,实现内容的批量制作和发布,提高…

vue echarts折线图 折线堆积图和折线面积图

vue echarts折线图 折线堆积图和折线面积图 1、折线堆积图和折线面积图的结合&#xff1b; 上代码 <template><section><divid"performaceLineChart"ref"performaceLineChartRef"style"width: 100%; height: 500px"></d…

CasinoRoyale靶机练习实践报告

CasinoRoyale靶机练习实践报告 下载地址: https://drive.google.com/open?id1FYP246L63zShV00wOckAQ5F5XJ4HkZ0Lhttps://download.vulnhub.com/casinoroyale/CasinoRoyale.ovahttps://download.vulnhub.com/casinoroyale/CasinoRoyale.ova.torrent ( Magnet) 1 安装靶机 …

分布式WEB应用中会话管理的变迁之路

Session一词直译为“会话”&#xff0c;意指有始有终的一系列动作&#xff0f;消息。Session是Web应用蓬勃发展的产物之一&#xff0c;在Web应用中隐含有“面向连接”和“状态保持”两个含义&#xff0c;同时也指代了Web服务器与客户端之间进行状态保持的解决方案。 在Web应用…

018基于SSM的音乐系统网站

018基于SSM的音乐系统/网站 开发环境&#xff1a; Jdk7(8)Tomcat7(8)MysqlIntelliJ IDEA(Eclipse)Maven 数据库&#xff1a; MySQL 技术&#xff1a; SpringSpring mvcMybatisJqueryVideo jsJSPJSTLEasyUI 适用于&#xff1a; 课程设计&#xff0c;毕业设计&#xff0c;学习…

tiktok如何影响用户行为的分析兼论快速数据分析的策略

tiktok如何影响用户行为的分析 快速数据分析的策略流程&#xff1a; 1.确定指标变量&#xff0c;也就确定了数据分析想要回答的问题。想回答不同的问题&#xff0c;就选择不同的指标变量。 变量筛选方法选出指标变量相关的变量&#xff1b; 针对筛选出的变量进行描述性分析和因…

职场口才使人取得事业上的成功?

职场口才使人取得事业上的成功&#xff1f; 一、引言 在职场中&#xff0c;一个人的口才能力往往成为其事业成功的关键因素。优秀的职场口才不仅能够帮助我们更好地与他人沟通交流&#xff0c;还能够展现个人的专业素养和魅力&#xff0c;为事业的顺利发展奠定坚实基础。本文将…

【软件】ERETCAD-Env:在轨空间环境3D动态仿真软件

文章介绍了Extreme-environment Radiation Effect Technology Computer-Aided Design – Environment (ERETCAD-Env)软件&#xff0c;文章的介绍和展示了ERETCAD-Env软件的功能和特点&#xff0c;这是一款用于动态模拟在轨卫星所处空间环境的计算机辅助设计软件。强调了该软件在…

城市建筑轮廓矢量边界、建设用地数据、城市道路网分布、城市土地利用规划分布、土地利用数据、城市绿地分布

数据下载链接&#xff1a;数据下载链接 中国主要城市建筑底面轮廓和建筑高度空间分布数据&#xff0c;包括省会城市、地级市及县级市等主要城市。城市建筑底面轮廓和建筑高度数据&#xff0c;数据坐标为 WGS84地理坐标&#xff0c; 数据格式为 SHP 文件。数据范围基本覆盖城市…

vscode中用node的终端安装模块

1 安装模块 在控制台输入 npm install crypto-js 创建好了会多几个文件 crypto-js是我们刚刚装的包&#xff0c;用于hash算法和aes des算法 2 package.json文件的作用 当我们把node-modules删了&#xff0c;或者是新建一个文件后我们不用把这个node-modules拷贝过去 在控制台…

路由器使用docker安装mysql和redis服务

路由器使用docker安装mysql和redis服务 1.先在路由器中开启docker功能 &#xff08;需要u盘 或者 移动硬盘&#xff09; 2. docker 管理地址 :http://192.168.0.1:11180/#/ 3. 拉取镜像 4. mysql容器参数设置 MYSQL_ROOT_PASSWORD 5. redis 容器设置 开发经常需要用到 &…

网络安全培训对软件开发人员的重要性

微信搜索关注&#xff1a;网络研究观 阅读获取更多信息。 组织所经历的持续不断的网络威胁没有任何放缓的迹象&#xff0c;使得实现有效安全的任务变得越来越具有挑战性。 根据最新的 Verizon 数据泄露调查报告&#xff0c;2023 年高级攻击增加了 200% 以上。 IBM 数据泄露成…

安居水站:自来水:日常中的安全与奥秘

在我们的日常生活中&#xff0c;自来水如同空气一样&#xff0c;是生活中不可或缺的一部分。每当我们拧开水龙头&#xff0c;清澈的水流便汩汩而出&#xff0c;滋养着我们的生活和健康。然而&#xff0c;这看似普通的自来水背后&#xff0c;却隐藏着许多我们可能并不了解的知识…

Spark AQE 导致的 Driver OOM问题

背景 最近在做Spark 3.1 升级 Spark 3.5的过程中&#xff0c;遇到了一批SQL在运行的过程中 Driver OOM的情况&#xff0c;排查到是AQE开启导致的问题&#xff0c;再次分析记录一下&#xff0c;顺便了解一下Spark中指标的事件处理情况 结论 SQLAppStatusListener 类在内存中存…

mac 教程 终端如何拆墙

一直觉得自己写的不是技术&#xff0c;而是情怀&#xff0c;一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的&#xff0c;希望我的这条路能让你们少走弯路&#xff0c;希望我能帮你们抹去知识的蒙尘&#xff0c;希望我能帮你们理清知识的脉络&#xff0…

面试:finalize

一、概述 将资源释放和清理放在finalize方法中非常不好&#xff0c;非常影响性能&#xff0c;严重时甚至会引起OOM&#xff08;Out Of Memory&#xff09;&#xff0c;从Java9开始就被标注为Deprecated&#xff0c;不建议被使用了。 二、两个重要的队列 1、unfinalized 队列 当…

SpringBoot中多数据源灵活切换解决方案

本篇内容介绍了“SpringBoot中如何使用Dynamic Datasource配置多数据源”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 源码地址/文档说明 功能特性: 支持 数据源分组…

vue与Spring boot数据交互例子【简单版】

文章目录 什么是Vue&#xff1f;快速体验Vueaxios是什么&#xff1f;向Springboot后端发送数据接收Springboot后端数据小结 什么是Vue&#xff1f; 官网解释&#xff1a;Vue 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上…

JAVA12

JAVA12 1 概述2 语法层次的变化1_swich表达式(预览) 3 API层次的变化1_支持数字压缩格式化2_String新方法3_Files新增mismatch方法 4 关于GC方面的新特性1_Shenandoah GC&#xff1a;低停顿时间的GC&#xff08;预览&#xff09;2_可中断的 G1 Mixed GC3_ 增强G1 5 其他新特性简…

ENVI下基于劈窗算法从MODIS数据中反演海表温度

劈窗算法最初是为反演海面温度开发的&#xff0c;具体地说是针对NOAA/AVHRR的4和5通道设计的&#xff0c;后来也被用来反演地表温度&#xff0c;这种算法较成熟&#xff0c;精度也高。劈窗算法以地表热辐射传导方程为基础&#xff0c;利用10~13μm 大气窗口内&#xff0c;两个相…
最新文章