顺序查找和二分查找

news/2024/4/30 15:11:02/文章来源:https://www.cnblogs.com/MorningMaple/p/16769816.html

 案例1):

 1 #include <stdio.h>
 2 
 3 int seqSearch(int arr[], int arrLen, int val){  //定义一个数组,一个数组长度,目标值
 4     for (int i = 0; i < arrLen; i++){
 5         if(arr[i] == val){
 6             return i;
 7         }
 8     }
 9     return -1;  //找不到则返回-1
10 }
11 
12 void main(){
13     int arr[] = {23, 1, 34, 89, 101};
14     int arrLen = sizeof(arr)/sizeof(int);
15     int index = seqSearch(arr, arrLen, -101);
16     if(index != -1){
17         printf("找到,下标为%d", index);
18     }else{
19         printf("错误,没有找到");
20     }
21     
22 }

案例2):

进行二分查找的前提:是一个有序数组!!

思路:

 

 

 

 1 #include <stdio.h>
 2 
 3 int binarySearch(int arr[], int leftIndex, int rightIndex, int findVal){
 4     //如果leftInde > rightIndex,说明这个数组都比较过,没有结果
 5     if(leftIndex > rightIndex){
 6         return -1;
 7     }
 8     
 9     //先找到中间的数
10     int midIndex = (leftIndex + rightIndex)/2;  //此时leftIndex=0,rightIndex=5,最后结果为2(精度丢失)
11     int midVal = arr[midIndex]; //arr[2]=10
12     //进行比较
13     if(midVal > findVal){   //如果midVal > findVal,说明要在midVal的左边查找
14         binarySearch(arr, leftIndex, midIndex-1, findVal);
15     }else if(midVal < findVal){ //如果midVal < findVal,说明要在midVal的右边查找
16         binarySearch(arr, midIndex+1, rightIndex, findVal);
17     }else{
18         return midIndex;    //返回改数的下标
19     }
20 }
21 
22 void main(){
23     int arr[] = {1, 8, 10, 89, 1000, 1234};
24     int arrLen = sizeof(arr)/sizeof(int);
25     int index = binarySearch(arr, 0, arrLen-1, 89);
26     if(index != -1){
27         printf("index = %d", index);
28     }else{
29         printf("没有找到");
30     }
31 }

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

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

相关文章

Java8 函数式编程

文章目录Java 函数式编程1. Lambda 表达式1.1 标准格式1.2 使用前提1.2.1 一个参数1.2.2 多个参数1.2.3 有返回值1.3 省略简化1.4 函数式接口1.4.1 Supplier1.4.2 Consumer1.4.3 Predicate1.4.4 Function1.5 方法引用1.5.1 对象 :: 实例方法1.5.2 类 :: 静态方法1.5.3 类 :: 实…

期货价格怎么算出来的?

期货价格怎么算出来的&#xff1f; 期货价格现货价格融资成本 如果对应资产是一个支付现金股息的股票组合&#xff0c;那么购买期货合约的一方因没有马上持有这个股票组合而没有收到股息。相反&#xff0c;合约卖方因持有对应股票组合收到了股息&#xff0c;因而减少了其持仓成…

数据结构-泛型(Java)

文章目录一、什么是泛型&#xff1f;1、非泛型2、泛型3、泛型的使用 泛型类 泛型接口 泛型方法二、泛型类1、 泛型类 正确使用分析 错误使用分析2、泛型类实现抽奖器3、泛型类派生子类 泛型类派生子类第一种第二种 非泛型三、泛型接口第一种&#xff1a;泛型类实现泛型接口第二…

使用python的pygame做的小游戏项目:小船打鱼

python小游戏项目&#xff1a;小船打鱼成果展示代码解析go_fishing.pygame_function.pygame_stats.pyscoreboard.pyalien.pysettings.pyship.pybullet.pybutton.py存在的问题代码都在这里&#xff0c;只需要创建好项目&#xff0c;将对应的代码保存在对应文件名的文件中即可&am…

【微搭低代码】Javascript基础知识-函数及模块介绍

低代码要想入门&#xff0c;首先需要学习javascript&#xff0c;我们已经有了两篇基础文章 变量定义及初始化 循环及条件控制 我们本篇介绍两个知识点&#xff0c;一个是函数&#xff0c;一个是模块 函数 在js中函数是可以重复使用的代码块&#xff0c;定义函数是为了去除冗余…

在Windows下自制ARM交叉编译工具链

参考链接&#xff1a;gnu工具链 1.Download MinGW and MSys packages. 安装MSys 参考此链接https://www.msys2.org/安装&#xff0c;注意只需要安装即可。 安装开发环境,设置镜像,需要进入安装路径中的/etc/pacman.d/进行修改 // /etc/pacman.d/mirrorlist.mingw32 Serve…

【5G RRC】5G 切换(handover)那点事儿

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

python去图片背景

Remove Image Background using Python https://youtu.be/RkdFkhfMK2k

跨境电商必读,WhatsApp营销入门指南!

关键词&#xff1a;WhatsApp营销、跨境电商营销 现在&#xff0c;跨境社交媒体和Messengers不仅仅是私人交流的渠道了。很多跨境电商已经找到了在WhatsApp营销的秘诀&#xff0c;如果你还没开始&#xff0c;你可能已经落后了。同时&#xff0c;与其他平台相比&#xff0c;在 W…

Vue组件-卡片动画倒计时

前言 最近有朋友在做投票的项目&#xff0c;里面有用到一个倒计时的组件&#xff0c;还想要个动画效果。cv大法浸染多年的我&#xff0c;首先想到的是直接找个现有的组件。 通过一通搜索&#xff0c;看上的只有一个 vue2-flip-countdown&#xff0c;但是当我要修改大小和颜色…

(附源码)计算机毕业设计SSM游乐园娱乐项目管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Github的使用教程

文章目录注册查找仓库下载代码fork仓库管理创建仓库添加文件提交issue提交/接受PRpages一直想进入工程这块领地&#xff0c;但是好像没咋学过github&#xff0c;今天学一下&#xff0c;先上个名词解释 注册 首先&#xff0c;github其实是不需要邮箱和手机号的&#xff0c;可以…

window11下安装.framework3.5的方法

window11下安装.framework3.5的方法 如果正常安装报错了&#xff0c;可采用如下方法重新安装 一、把安装iso文件 zh-cn_windows_11_business_editions_version_22h2_updated_sep_2022_x64_dvd_515a832b.iso 装载到虚拟盘中H:\sources\sxs\中的文件拷贝到硬盘已存在的盘符F:\w…

容器适配器——stack/queue/priority_queue

目录 一. stack 二. queue 三. priority_queue 1. empty()&#xff0c;top()&#xff0c;size()的实现 2. pop和push的实现 适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结)&#xff0c;该种模式是将一个类的接口转…

C语言:数组参数、指针参数

目录 一.字符指针&#xff0c;指针数组&#xff0c;数组指针简单回顾 二.数组参数、指针参数 一维数组传参 二维数组传参 这里需要注意&#xff1a; 一级指针传参 思考 二级指针传参 思考 一.字符指针&#xff0c;指针数组&#xff0c;数组指针简单回顾 #include<std…

java虚拟机中的双亲委派机制

文章目录双亲委派机制工作原理工作场景调用过程三种加载器调用范围String类加载过程StringTest类加载过程双亲委派机制优点双亲委派机制 Java虚拟机对class文件采用的是按需加载的方式&#xff0c;也就是说当需要使用该类时才会将它的class文件加载到内存生成class对象。而且加…

一些有趣的小项目合集~

pyqt人脸识别&#xff1a; nullhttps://www.jb51.net/article/168718.htmpyqt目标检测&#xff1a; 利用PyQt5为目标检测Faster-rcnn-Pytorch添加GUI界面&#xff08;二&#xff09;-python黑洞网 (pythonheidong.com)https://www.pythonheidong.com/blog/article/337144/e2d…

最常见的IMU:MPU6050

I2CI^2CI2C通讯 ​ I2CI^2CI2C is a two-wire interface comprised of the signals serial data (SDA) and serial clock (SCL). In general, the lines are open-drain and bi-directional. In a generalized I-C interface implementation, attached devices can be a maste…

优雅的处理参数校验以及异常

1、前言 编写控制层时&#xff0c;我们可能会自己去校验请求参数&#xff0c;就会出现这样的代码&#xff1a; if (StringUtils.isEmpty(memberSid)) {return new JsonResult(false, "参数memberSid为空"); } if (null test) {return new JsonResult(false, "…

油溶性PbS量子点近红外发射光PL800nm-1600nm

油溶性PbS量子点近红外发射光PL800nm-1600nm 油溶性PbS量子点产品&#xff0c;表面由疏水配体包覆&#xff0c;平均的量子产率为50%&#xff0c;储存时应避免阳光直射&#xff0c;4度密封暗处保存&#xff0c;可以为客户订制生产800nm&#xff5e;1600nm任一波长不同克数的产品…