C:每日一题:二分查找

1、知识介绍:

1.1 概念:

二分查找是一种在有序数组中查找某一特定元素的搜索算法

1.2 基本思想:

每次将待查找的范围缩小一半,通过比较中间元素与目标元素的大小,来决定是在左半部分还是右半部分继续查找。

举个生活中的小例子:

比如说你朋友和你说她买了一件衣服价格不超过300元,然后让你猜一猜具体的价格,你肯定不会像 1 2 3……这样一个一个猜,而是先猜中间值150,如果实际价格比150大,则0~150之间的数字就不需要再猜,此时范围便缩小到150~300;这时候再猜225,如果实际价格小于225元,则225~300之间的数字就不需要再猜了,经过这样几次的猜测后,范围会逐渐缩小,大大提高了猜中数字的效率,这种思想就是二分查找。

1.3 二分查找的优缺点:

优点:二分查找的效率很高,在查找有序数组中的数字时,比遍历数组的效率高很多;

不足:二分查找的使用条件很苛刻,只有在有序数组中才能使用二分查找。

2、题目

写一个二分查找函数

功能:在一个升序数组中查找指定的数值,找到了就返回下标,找不到就返回-1.

int arr[ 10] = {11,23,23,56,77,88,98,111,121,131}

3、思路:

关于查找数组中的元素,我们一般是通过下标来锁定元素

3、 分析main函数

int main()
{int arr[] = {11,23,23,56,77,88,98,111,121,131};int k = 0;scanf("%d", &k);//输入想要找的值int sz = sizeof(arr) / sizeof(arr[0]);//获取元素个数int left = 0;int right = sz - 1;int result = bin_search(arr, left, right, k);if (result != -1) {printf("找到了,下标为: %d\n", result);}else {printf("未找到\n");}return 0;
}

3.1  代码解释int left = 0; int right = sz - 1;

 3.2 代码解释 int result = bin_search(arr, left, right, k);

 bin_search是一个自定义函数,用来实现二分查找的过程

int result = bin_search(arr, left, right, k);是调用了一个名为 bin_search 的函数,并将返回值存储在变量  result 中。

  • arr 是要进行查找操作的数组。
  •  left 和 right 分别是数组的起始下标和结束下标,确定了当前要查找的范围。
  • k 是要在数组中查找的目标值。

4、分析函数bin_search

int bin_search(int arr[], int left, int right, int k)
{int mid = (left + right) / 2;while (left <= right){int mid = (left + right) / 2;if (arr[mid] < k){left = mid + 1;}else if (arr[mid] > k){right = mid - 1;}else{return mid;}}return -1;
}

4.1 二分查找的运算方式:

5、完整代码

#include <stdio.h>
int bin_search(int arr[], int left, int right, int k)
{int mid = (left + right) / 2;while (left <= right){int mid = (left + right) / 2;if (arr[mid] < k){left = mid + 1;}else if (arr[mid] > k){right = mid - 1;}else{return mid;}}return -1;
}int main()
{int arr[] = {11,23,23,56,77,88,98,111,121,131};int k = 0;scanf("%d", &k);int sz = sizeof(arr) / sizeof(arr[0]);int left = 0;int right = sz - 1;int result = bin_search(arr, left, right, k);if (result != -1) {printf("找到了,下标为: %d\n", result);}else {printf("未找到\n");}return 0;
}

  函数bin_search  会在给定的数组范围 left 到  right 内查找目标值 k ,并返回找到目标值时的下标或者 -1 表示未找到。然后这个返回值就被赋值给了 result  ,后续的代码会根据 result  的值来判断是否找到了目标值。

6、不使用函数的二分查找

#include <stdio.h>
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int k = 7;scanf("%d", &k);int sz = sizeof(arr) / sizeof(arr[0]);int left = 0;int right = sz - 1;int flag = 0;while(left <= right){int mid = (left + right) / 2;if (arr[mid] < k){left = mid + 1;}else if (arr[mid] > k){right = mid - 1;}else{printf("找到了,下标位%d\n", mid);flag = 1;break;}}if (flag == 0)printf("没找到");return 0;
}

如果觉得还不错的话,就给小编一个三连吧!!!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

servlet基础操作(get)

1&#xff0c;首先创建一个javaweb的项目 简历一般的java项目选中项目&#xff0c;双击shift出现搜索栏 找到这个框架&#xff0c;选择里面的javaweb&#xff0c;注意选择右侧版本显示为4.0的javaweb 之后部署Tomcat 我这里是本地&#xff0c;所以在本地选的是local 第一步实…

文心快码 Baidu Comate 前端工程师观点分享:行业现状(二)

本系列视频来自百度工程效能部的前端研发经理杨经纬&#xff0c;她在由开源中国主办的“AI编程革新研发效能”OSC源创会杭州站105期线下沙龙活动上&#xff0c;从一款文心快码&#xff08;Baidu Comate&#xff09;前端工程师的角度&#xff0c;分享了关于智能研发工具本身的研…

期望薪资3k,面试官笑了但没说话

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330#rd 《网安面试指南》http://mp.weixin.qq.com/s?…

江科大/江协科技 STM32学习笔记P21

文章目录 ADC模数转换器ADC简介逐次逼近型ADCSTM32的ADCADC基本结构输入通道转换模式单次转换&#xff0c;非扫描模式连续转换&#xff0c;非扫描模式单次转换&#xff0c;扫描模式连续转换&#xff0c;扫描模式 触发控制数据对齐转换时间校准硬件电路电位器产生可调电压的电路…

DC-4靶机

扫描IP 端口扫描 目录扫描 访问80端口&#xff0c;发现一个登录界面 爆破密码 hydra -l admin -P rockyou.txt 192.168.254.153 http-post-form "/login.php:username^USER^&password^PASS^:Slogout" -F-l admin&#xff1a;指定用户名为 admin。 -P rockyou.t…

three.js 安装方法、基础简介、创建基础场景

threejs简介 Three.js是一个基于JavaScript编写的开源3D图形库&#xff0c;‌利用WebGL技术在网页上渲染3D图形。‌ 它提供了许多高级功能&#xff0c;‌如几何体、‌纹理、‌光照、‌阴影等&#xff0c;‌使得开发者能够快速创建复杂且逼真的3D场景。‌ threejs提供了丰富的功…

【Linux系列】known_hosts详解

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

通过Go示例理解函数式编程思维

一个孩子要尝试10次、20次才肯接受一种新的食物&#xff0c;我们接受一种新的范式&#xff0c;大概不会比这个简单。-- 郭晓刚 《函数式编程思维》译者 函数式编程(Functional Programming, 简称fp)是一种编程范式&#xff0c;与命令式编程(Imperative Programming)、面向对象编…

【网络ping】无法ping通电脑 服务器失败是什么原因

【网络ping】无法ping通电脑 服务器失败是什么原因 转载&#xff1a; https://www.lsjlt.com/ask/show/show.php?id80772631782 点击此处 查看博文《无法ping通的原因》 一、无法ping 通的原因 网络连接问题&#xff1a;首先需要检查网络连接是否正常。可以尝试通过ping其他…

模型部署 - docker

docker简介 Docker 是一种开源的容器化平台&#xff0c;允许开发者将应用程序及其依赖项打包到一个标准化的单元中&#xff0c;称为“容器”。这些容器可以在任何支持 Docker 的系统上运行&#xff0c;无需担心环境差异。 为什么需要 Docker&#xff1f; 在传统的开发中&…

MySQL 5.7 DDL 与 GH-OST 对比分析

作者&#xff1a;来自 vivo 互联网存储研发团队- Xia Qianyong 本文首先介绍MySQL 5.7 DDL以及GH-OST的原理&#xff0c;然后从效率、空间占用、锁阻塞、binlog日志产生量、主备延时等方面&#xff0c;对比GH-OST和MySQL5.7 DDL的差异。 一、背景介绍 在 MySQL 数据库中&…

MyBatis--XML映射文件

MyBatis–XML映射文件 lombok工具包 为了解决声明实体类的get()和set()函数臃肿的问题&#xff0c;我们使用lombok工具包。 我们看一下lombok工具包为我们提供的注解&#xff1a; XML映射文件 我们需要遵守下面的规则&#xff1a; 首先XML映射文件和Mapper接口包应该在同…

wps怎么找回未保存的文件?分享三个文件恢复方法

在编辑WPS文档时&#xff0c;偶尔会遇到未保存就意外关闭的情况&#xff0c;这不仅令人沮丧&#xff0c;还可能导致重要信息的丢失。但幸运的是&#xff0c;WPS提供了多种途径来帮助用户找回这些未保存的宝贵文件。从利用WPS的自动备份与恢复功能&#xff0c;到检查最近文档列表…

树形结构查找(B树、B+树)

平衡树结构的树高为 O(logn) &#xff0c;平衡树结构包括两种平衡二叉树结构&#xff08;分别为 AVL 树和 RBT&#xff09;以及一种树结构&#xff08;B-Tree&#xff0c;又称 B 树&#xff0c;它的度大于 2 &#xff09;。AVL 树和 RBT 适合内部存储的应用&#xff0c;而 B 树…

堆(数据结构)

堆的概念与结构 堆的底层逻辑是一个完全二叉树&#xff08;或满二叉树&#xff09;。 堆的分类 大根堆和小根堆 大根堆 所谓大根堆就是每一个父节点都要大于等于子结点 小根堆 所谓小根堆就是每一个父节点都要小于等于子结点 堆的实现 (未完待续 待续......)

力扣高频SQL 50题(基础版)第四十四题之626. 换座位

文章目录 力扣高频SQL 50题&#xff08;基础版&#xff09;第四十四题之626. 换座位626. 换座位题目说明思路分析实现过程准备数据实现方式结果截图 力扣高频SQL 50题&#xff08;基础版&#xff09;第四十四题之626. 换座位 626. 换座位 题目说明 表: Seat --------------…

【网络】IP-VPN技术概述

目录 引言 核心协议 封装与加密 工作流程 IP-VPN的应用场景 MPLS-VPN 个人主页&#xff1a;东洛的克莱斯韦克-CSDN博客 引言 IP-VPN&#xff08;Internet Protocol - Virtual Private Network&#xff09;是一种通过公共网络实现私密、安全通信的技术。它主要依赖于互联网…

力扣系统刷题-树(一)

放松了一周,也一周都没写题了,接下来,我做题的方式可能会更趋向于成体系的学习,今天就先从树的章节开始学起,主要参考的学习资料还是博客,知乎等网上较为系统的教材,涉及到的参考内容我都会进行标注,并以力扣题目作为导向来学习. 一.树 1. 什么是树 根据维基百科的定义:在计…

InfluxDB Studio 下载,时序数据库Windows图形界面操作

下载地址&#xff1a; https://github.com/CymaticLabs/InfluxDBStudio/releases解压缩后&#xff0c;双击 InfluxDBStudio.exe 运行。 参考 windows下 influxDB 操作工具 InfluxDBStudio 吐槽 现在 CSDN 太恶心了&#xff0c;动不动就让订阅或者积分下载资源。诚然&#…

主机组装笔记

参考资源&#xff1a;B站【装机教程】全网最好的装机教程&#xff0c;没有之一&#xff0c;仅供探讨学习 9大部件一览 其中得到固态和机械&#xff0c;是硬盘&#xff0c;存储空间&#xff0c;可以只选固态 CPU&#xff0c;主要有 AMD 和 Intel (AMD&#xff0c;基板的背面布…