【算法】带你快速搞懂 二分查找算法问题(图解+练习)

news2024/9/28 23:31:28


目录

❤️一:二分查找分析简介❤️

❤️二:二分查找代码实现❤️

​编辑

❤️三:二分查找代码分析图解❤️

❤️四:解决二分查找相关题型❤️

💕4.1:二分查找题型一💕

💕4.2:二分查找题型二💕


❤️一:二分查找分析简介❤️

        二分查找算法(Binary Search Algorithm)是一种用来在有序数组中查找特定元素的算法。该算法的基本思想是通过将待查找的元素与数组中间的元素进行比较,然后根据比较结果将待查找元素的搜索范围缩小一半。通过不断缩小搜索范围,最终可以在数组中快速定位到目标元素。

二分查找算法的基本步骤:

  1. 首先将待查找的元素与数组中间元素进行比较。
  2. 如果相等,则返回元素的索引位置。
  3. 如果待查找元素小于中间元素,则在左半部分继续查找。
  4. 如果待查找元素大于中间元素,则在右半部分继续查找。
  5. 重复以上步骤,直到找到目标元素或者搜索范围为空。

❤️二:二分查找代码实现❤️

代码实现:

// 二分查找算法
// 猜数字
#include<stdio.h>

// 二分查找算法
int Search(int* arr, int sz, int num)	// arr:代表被查找的数组,sz:数组的大小,num:被查找的数字
{
	int left = 0;
	int right = sz - 1;
	int i = 1;
	
	while (left <= right)
	{
		int mid = (left + right) / 2;

		printf("第%d次查找:left = %-5d mid = %-5d right = %-5d\n", i, left, mid, right);
		++i;

		if (arr[mid] > num)			// 中间位置数字比num大,缩减范围
		{
			right = mid - 1;
		}
		else if (arr[mid] < num)	// 中间位置数字比num小,缩减范围
		{
			left = mid + 1;
		}
		else						// arr[mid]==num,找到该数字
		{
			return mid;				// 返回下标
		}
	}
	return -1;		// left>right:非法,即没有找到
}

int main()
{
	int i = 0;
	int arr[100] = { 0 };
	// 初始化arr数组	arr[0]=1,arr[1]=2.....arr[99]=100;(是有序的)
	for (i = 0; i < 100; i++)
	{
		arr[i] = i + 1;
	}
	// 输入要猜的数字
	int guess = 0;
	printf("请输入要猜的数字\nguess =>");
	scanf("%d", &guess);
	// 二分查找算法
	int j = Search(arr, 100, guess);
	if (j > 0)
		printf("找到啦,该数字在arr数组中下标为%d的位置\n", j);
	else
		printf("没有找到\n");

	return 0;
}

运行结果:

❤️三:二分查找代码分析图解❤️

        该代码中数组arr是一个由1-10的有序数组:arr[0]=1,arr[1]=2, ... ,arr[9]=10。假设要猜的数字是数字3。

步骤一:

因为要猜的数字arr[mid]==5>3,所以此时需要 right = mid-1,也就是:

步骤二:

此时,right==3,left==0,mid==1。又因为arr[mid]==2<3,所以需要 left = mid+1,也就是:

步骤三:

 此时 arr[mid]==3==guess。即找到了该数字。循环完毕。


总结:二分查找算法的时间复杂度为 O(log n),其中 n 为数组元素个数。相较于线性查找算法,二分查找算法的效率更高,尤其适用于大型有序数组的查找操作。

❤️四:解决二分查找相关题型❤️

(●'◡'●) 练习巩固 (●'◡'●)👍

💕4.1:二分查找题型一💕

二分查找-I_牛客题霸_牛客网 (nowcoder.com)

💕4.2:二分查找题型二💕

二分查找-II_牛客题霸_牛客网 (nowcoder.com)


每日鸡汤:心疼过去不如想通,想通了就会豁然开朗,放下包袱,迎接更轻松的明天

祝愿大家都有一个好的未来,不辜负现在的努力!!!🦖🦖🦖 

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

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

相关文章

java文件操作和IO流(详解)(๑•́ ₃ •̀๑)エー

目录 &#x1f604;一.认识文件 1.1文件的概念与组成&#xff1a; 1.2树形结构组织与目录&#xff1a; 1.3文件路径: &#x1f61a;二.文件系统操作 2.1File类概述&#xff1a; 2.2案例演示&#xff1a; 案例演示一&#xff1a; 演示案例二&#xff1a; &#x1f92a;…

【Python系列】signal信号处理

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Unix 系统

各种各样的系统优缺点-CSDN博客 目录 █ 操作系统的诞生 █ UNIX的诞生 █ Linux的诞生 █ Linux和Unix的关系 █ Linux的发行版 说到操作系统&#xff0c;大家都不会陌生。我们天天都在接触操作系统——用台式机或笔记本电脑&#xff0c;使用的是windows和macOS系统&…

Docker续2:docker部署前端项目

一、部署前端页面 [rootlocalhost ~]# ls //导入dist项目 anaconda-ks.cfg centos_httpd.tar centos_nginx centos.tar centos_yum.tar dist [rootlocalhost ~]# docker pull mysql //下载mysql [rootlocalhost ~]# docke…

深入垃圾回收:理解GC的核心算法与实现

垃圾回收&#xff08;Garbage Collection&#xff0c;GC&#xff09;是现代编程语言中一项关键技术。它不仅解决了内存管理中的诸多问题&#xff0c;还为开发者提供了一个更高效、更安全的编程环境。本文将深入探讨GC的起源、主要算法以及这些算法在不同编程语言中的具体实现。…

你好GPT-4o,程序员如何通过GPT-4o提升自己的编码能力

目录 round 1&#xff1a;图片识别能力ChatGPT4oClaude3.5 Sonnet图片识别能力小结&#xff1a;图片识别能力&#xff0c;ChatGPT4o完胜。 round 2&#xff1a;代码能力ChatGPT4oClaude3.5 Sonnet代码能力小结&#xff1a;代码能力&#xff0c;Claude3.5 Sonnet小胜。 round 3&…

Git之1.0版本重要特性及用法实例(五十二)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者. 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列…

HCS-网络服务

一、华为云Stack网络服务概览 1.网络服务包括&#xff1a;虚拟私有云、弹性负载均衡、弹性IP、网络ACL、虚拟专用网络、云专线、VPC终端节点、云解析 2.华为云Stack网络服务全景图&#xff1a; 二、云上通用网络服务 1.虚拟私有云 虚拟私有云&#xff08;Virtual Private Clo…

C++系列-STL容器之stack

STL容器之stack stack容器的概念stack的构造函数及接口stack的注意事项 浣溪沙簌簌衣巾落枣花 苏轼 簌簌衣巾落枣花&#xff0c;村南村北响缲车。牛衣古柳卖黄瓜。 酒困路长惟欲睡&#xff0c;日高人渴漫思茶。敲门试问野人家。 stack容器的概念 stack容器是一种容器适配器(通…

阿里云数智服务创新挑战赛总决赛铜奖比赛攻略_NJUSME队

关联比赛: 阿里云数智服务创新挑战赛——服务调度比赛 下面我们将从赛题场景、核心算法以及算法的场景拓展对我们的解决方案进行说明。 1 赛题场景 首先对赛题场景进行分析。我们建立流程图&#xff0c;梳理整体的调度流程。首先客户会先进入系统&#xff0c;定位问题明确问…

cesium 雪积压效果(customShader)

cesium 雪积压效果 原理&#xff1a;不同于后处理&#xff0c;这里采用的是customShader 优点&#xff1a;不用模型法线&#xff0c;仅模型雪覆盖 效果图

Qt (12)【Qt窗口 —— 消息对话框 QMessageBox 】

阅读导航 引言一、消息对话框简介二、问题提示消息对话框创建三、信息提示消息对话框创建四、警告信息消息对话框创建五、错误提示消息对话框创建 引言 在上一篇文章中&#xff0c;我们一同探索了Qt框架中窗口与对话框的奥秘&#xff0c;特别是那些由Qt内置提供的、功能丰富且…

公安的实名认证如何对接?

实名认证已成为许多在线服务和应用的必要环节。本文将为您详细介绍如何对接公安的实名认证系统,包括主要合作方、对接流程以及技术细节。 1. 中盾安信简介 北京中盾安信科技发展有限公司(简称"中盾安信")是公安部第一研究所的全资子公司。作为国家"互联网"…

这 3 个开源项目 牛逼的飞起

分享几个 git 上好玩的应用&#xff0c;对独立开发程序感兴趣的小伙伴欢迎关注后期圈&#xff5e; 点个赞呗 01个性化桌面状态栏的神器 开源地址&#xff08;自行添加网址&#xff09;&#xff1a;/polybar/polybar 一个让无数开发者和桌面美化爱好者爱不释手的开源项&#x…

VBA学习(67):Excel VBA 提取数字/自定义工作表函数/正则表达式/批量提取电话号码

正则表达式&#xff08;Regular Expression&#xff09;&#xff0c;又称为“正则式”、“规则表达式”、“常规表示法”&#xff0c;是一种用来匹配、查找、替换字符串的工具。它通过一定的符号、元字符和操作符的组合来表达一个特定的模式&#xff0c;从而匹配符合该模式的字…

opencv实战项目十八:Gabor滤波器提取布料纹理

文章目录 前言一、Gabor简介二、cv2.getGaborKernel&#xff08;&#xff09;三&#xff0c;效果&#xff1a; 前言 在计算机视觉和图像处理领域&#xff0c;纹理分析一直是一个热门且富有挑战性的话题。纹理&#xff0c;作为图像中的一种重要视觉特征&#xff0c;不仅承载着丰…

关于BitConverter.GetBytes取得的值是反的问题

通过百度查询450000转16进制&#xff0c;我们得到的值是6DDD0&#xff0c; 在前面补零之后的值应该是0006DDD0。如下图所示。 实际上我们用BitConverter.GetBytes 方法转换450000为byte[] 的时候, 转换后的值用16进制显示为D0DD0600(因为我这里是一个通讯协议的数据传输前转换&…

回归预测 | Matlab实现GWO-BP-Adaboost灰狼算法优化BP神经网络集成学习多输入单输出回归预测

回归预测 | Matlab实现GWO-BP-Adaboost灰狼算法优化BP神经网络集成学习多输入单输出回归预测 目录 回归预测 | Matlab实现GWO-BP-Adaboost灰狼算法优化BP神经网络集成学习多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现GWO-BP-Adaboost灰…

GMS——利用 ChatGPT 和扩散模型进行制造业革命

概述 论文地址&#xff1a;https://arxiv.org/abs/2405.00958 研究介绍了生成式制造系统&#xff08;GMS&#xff09;&#xff0c;并表明这些系统能有效管理和协调自主制造资产&#xff0c;提高它们对不同生产目标和人类偏好的响应能力和灵活性。 与传统的显式建模不同&#…