首页 > 其他分享 >简单使用二分查找法

简单使用二分查找法

时间:2023-08-10 21:34:04浏览次数:38  
标签:二分 下标 int 元素 中间 查找 数组 简单

#include <stdio.h>

int main(void) {
	
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };

	int sz = sizeof(arr) / sizeof(arr[0]);//元素个数
	
	int Number = 5;//需要查找的值

	int right =sz-1;//右下标

	int left = 0;//左下标

	while (left<=right){

		int half = (right + left) / 2;

		if (arr[half] < Number) {
			left = half + 1;
		}
		else 

		if (arr[half] > Number) {
			right = half - 1;
		}
		
		if(arr[half]==Number) {
			printf("TURN!WE FOUND!");
			break;
		}


		if (left >= right) {
			printf("OH!NOT FOUND!");
			break;
		}
	}
	
	return 0;
}

二分查找法

  • 二分查找法,是在有序数组内查找元素的算法,在每次查找时,找整个数组的中间值。
  • 如果中间值与查找的目标值相同,则结束查找。
  • 若中间值大于目标值,则搜索目标去掉已经查找到的中间值和中间值左边的所有值,继续取中间值搜索。
  • 若中间值小于目标值,则搜索目标去掉中间值和中间值右边所有值,继续取中间值搜索。

左右下标

  • 左边标初始恒为0
  • 右下标初始为元素个数减一,因为数组恒为由0下标开始的顺序,而元素个数一般恒不为0。因此逻辑可得。

中间值

  • 若要以代码形式来求一个数组所有元素的中间值,那么就需要将左下标和右下标放在开始结束的位置。
  • 之后,将左右下标在数组中代表的元素相加,整体除二就能实现了。

算法实现

  • 依据二分查找法的定义,写下符合概念逻辑的代码的语句。
  • 但是会发现,如果无法查找的目标,将会无尽循环。(在不知道需要循环多少次的情况下,使用真为条件循环,遇到break才能跳出循环。)
  • 当左右下标相对指向并相遇以后继续执行,那么依逻辑可知,在数组中没有需要查找的元素。就是无法查找到元素,那么就需要设置条件,左下标恒小于等于右下标。

最后

  • 使用文字说明阐述元素是否查找到,并且查找到的元素是什么。

标签:二分,下标,int,元素,中间,查找,数组,简单
From: https://blog.51cto.com/u_16212408/7040133

相关文章

  • WEB自动化-Allure报告-Allure安装和简单用法
    WEB自动化测试可以借助Allure生成美观的测试报告。1、安装工具及配置环境变量1.安装JDK1.8才可运行allure,直接百度,一大堆2.下载Allure的安装包(版本号:2.13.5)https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/3.解压Allure压缩包......
  • 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素
    704二分查找题目给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。第一想法判断条件是value=target因为数组是升序,其实每种查找方法应该相差不大?不过题目都标了二分查找了emmm思......
  • el-tree 全部禁用 超简单解决办法
    有这么个需求,要求el-tree有多选框,但是要全部禁用,只展示看 但是el-tree这个属性上没有看到全部禁用的属性,只看到了单个节点禁用,所以有一个麻烦的办法,就是递归禁用所有节点,但是这个方法麻烦耗时,所以看到官方文档有这么个东西 于是我们想办法,把这个Props用上,于是就这样了......
  • 嵌入式Linux ------ 一次简单的FrameBuffer驱动开发
    Linux一次简单的FrameBuffer驱动开发设施版本CPUAllwinnerF1C200slinux6.4.0-rc4显示器1.28inch16-grayscaleOLED128x128驱动ICSSD1327Orangepi5声明本驱动仓库位于:https://github.com/AllwinnerSuniv/suniv-epd/tree/main/ssd1327本驱动代......
  • apache/hop-web 2.5安装和简单入门
    一、使用Docker安装部署1、拉取镜像推荐使用下面的web版本dockerpullapache/hop:latestdockerpullapache/hop-web:latest2、部署a、简单部署(不使用用户名密码)dockerrun-p8080:8080apache/hop-web:latestb、使用用户名密码和相关数据库配置的部署docker文件......
  • CLion中构建最简单的QT环境
    在安装好QT之后,在CLion中新建项目,可以看到QT相关的项目类型。注意这里的QtCMake前缀,这里需要填QT的CMake路径。但是这里不填也是可以的。在CMakeList中还有机会填。Create项目之后,会有一票报错,没有关系先不管。首先在Setting中构建ToolChain。我这里有一个VS的MSVC,有一个我自......
  • llama2模型部署方案的简单调研-GPU显存占用(2023年7月25日版)
    https://blog.csdn.net/Fatfish7/article/details/131925595先说结论全精度llama27B最低显存要求:28GB全精度llama213B最低显存要求:52GB全精度llama270B最低显存要求:280GB16精度llama27B预测最低显存要求:14GB16精度llama213B预测最低显存要求:26GB16精度llama270B预测最低显......
  • 目标检测mAP计算方法-简单易懂
    本次将整理一份map计算方法,主要分为三部分,第一部分简单了解原理,第二部分理解如何调用coco等相关库得到map,第三部分教会读者如何结合模型(任何可计算map的网络模型)调用而生成map,而本博客希望读者能掌握使用模型预测map,其重点也为第三部分: 第一部分介绍map原理,主要引用部分他人结......
  • pytorch的简单线性回归
    2023-08-09本节课视频:https://www.bilibili.com/video/BV1PX4y1g7KC?p=4&spm_id_from=pageDriver&vd_source=bd35cfd68e5bfc28dcf5a57f74e25ae3 首先是创建数据迭代器defload_array(data_arrays,batch_size,is_train=True):dataset=data.TensorDataset(*data_ar......
  • 月度开销--二分法
    【题目描述】农夫约翰是一个精明的会计师。他意识到自己可能没有足够的钱来维持农场的运转了。他计算出并记录下了接下来N(1≤N≤100,000)天里每天需要的开销。约翰打算为连续的M(1≤M≤N)个财政周期创建预算案,他把一个财政周期命名为fajo月。每个fajo月包含一天或连......