轻松拿捏C语言——二分查找

🥰欢迎关注 轻松拿捏C语言系列,来和 小哇 一起进步!✊

🌈感谢大家的阅读、点赞、收藏和关注💕


目录🎉

 一、介绍🌈

二、步骤🌙

三、代码☀️


 

 一、介绍

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

举个生活中的例子,当我们要去图书馆借书时,知道了要找的图书编号,我们可以在一个大致范围的中间查找,然后在决定往前找还是往后找。这样就能比一本一本地找更加快速。

搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;

如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。

如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。

二、步骤

  1. 确定搜索范围,即数组的下标范围left和right。
  2. 计算中间元素的下标mid = (left + right) / 2(注意整数除法)。

        但是像这样求平均值,如果数字太大了超过int类型能表示的最大范围,这种算法就会有问题,整数会溢出。

        所以我们可以换一个思路,把两数的差值的一半 加到另一个数字中:

        mid = left + (right-left) /2 

  1. 判断中间元素与目标值的大小关系。
    • 如果相等,则返回中间元素的下标。
    • 如果目标值小于中间元素,则在左半部分继续搜索(right = mid - 1)。
    • 如果目标值大于中间元素,则在右半部分继续搜索(left = mid + 1)。
    • 如果搜索范围left大于right,则表示数组中没有目标值,返回-1或其他表示未找到的值。

三、代码

法一:用递归实现

#include <stdio.h>  int Sort(int arr[], int left, int right, int Key) {  if (left > right) return -1; // 搜索范围无效  int mid = left + (right - left) / 2;  //这种写法可避免溢出if (arr[mid] == Key) {  return mid; // 找到目标,返回下标  } else if (arr[mid] > Key) {  return Sort(arr, left, mid - 1, Key); // 在左半部分继续搜索  } else {  return Sort(arr, mid + 1, right, Key); // 在右半部分继续搜索  }  
}  int main() {  int arr[] = {1, 3, 5, 7, 9};  int key = 5;  int n = sizeof(arr) / sizeof(arr[0]);  int ret = Sort(arr, 0, n - 1, key);  if (ret != -1) {  printf("元素 %d 在数组中的下标为 %d\n", key, ret);  } else {  printf("元素 %d 不在数组中\n",key);  }  return 0;  
}

法二:用循环实现

#include <stdio.h>  int Sort(int arr[], int N, int Key) 
{  int left = 0;int right = N - 1;  while (left <= right) {  int mid = left + (right - left) / 2;  if (arr[mid] == Key) {  return mid;  } else if (arr[mid] > Key){  right = mid - 1;  }else{  left = mid + 1;  }  }  return -1; // 未找到目标值  
}  int main()
{  int arr[] = {1, 3, 5, 7, 9};  int key = 5;  int n = sizeof(arr) / sizeof(arr[0]);  int ret = Sort(arr, n, key);  if (ret != -1) {  printf("元素 %d 在数组中的下标为 %d\n", key, ret);  } else {  printf("元素 %d 不在数组中\n",key);  }  return 0;   
}

使用循环的方式来实现二分查找,更直观且易于理解。

不过,递归的方式在某些情况下可能更简洁。

无论使用哪种方式,都需要确保数组是有序的,因为二分查找的前提是有序数组。 


 

 🎉🎉🎉本文内容结束啦,希望各位大佬多多指教!

🌹🌹感谢大家三连支持

💕敬请期待下篇文章吧~

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

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

相关文章

【Linux-驱动开发】

Linux-驱动开发 ■ Linux-应用程序对驱动程序的调用流程■ Linux-file_operations 结构体■ Linux-驱动模块的加载和卸载■ 1. 驱动编译进 Linux 内核中■ 2. 驱动编译成模块(Linux 下模块扩展名为.ko) ■ Linux-■ Linux-■ Linux-设备号■ Linux-设备号-分配■ 静态分配设备号…

家电维修上门维修小程序怎么搭建制作?

​在家庭生活中&#xff0c;家电的维修问题一直是人们关注的焦点。随着微信小程序的普及&#xff0c;家电维修服务行业也迎来了线上转型的机遇。一款便捷、高效的家电维修上门维修小程序&#xff0c;不仅能为维修服务商带来新的客户&#xff0c;也能为用户带来更便捷的服务体验…

[Algorithm][动态规划][路径问题][下降路径最小和][最小路径和][地下城游戏]详细讲解

目录 1.下降路径最小和1.题目链接2.算法原理详解3.代码实现 2.最小路径和1.题目链接2.算法原理详解3.代码实现 3.地下城游戏1.题目链接2.算法原理详解3.代码实现 1.下降路径最小和 1.题目链接 下降路径最小和 2.算法原理详解 思路&#xff1a; 确定状态表示 -> dp[i][j]的…

用WPS将多张图片生成一个pdf文档,注意参数设置

目录 1 新建一个docx格式的文档 2 向文档中插入图片 3 设置页边距 4 设置图片大小 5 导出为pdf格式 需要把十几张图片合并为一个pdf文件&#xff0c;本以为很简单&#xff0c;迅速从网上找到两个号称免费的在线工具&#xff0c;结果浪费了好几分钟时间&#xff0c;发现需要…

面试-软件工程与设计模式相关,Spring简介

面试-软件工程与设计模式相关&#xff0c;Spring简介 1.编程思想1.1 面向过程编程1.2 面向对象编程1.2.1 面向对象编程三大特征 1.3 面向切面编程1.3.1 原理1.3.2 大白话&#xff1f;1.3.3 名词解释1.3.4 实现 2. 耦合与内聚2.1 耦合性2.2 内聚性 3. 设计模式3.1 设计模型七大原…

【Nodejs-多进程之Cluster】

cluster 模块是 Node.js 提供的一个用于多进程的模块&#xff0c;它可以轻松地创建一组共享同一个服务器端口的子进程&#xff08;worker进程&#xff09;。通过使用 cluster 模块&#xff0c;可以充分利用多核系统&#xff0c;提高应用程序的性能和可靠性。 基本原理 cluste…

React开发环境配置详细讲解-04

React环境 前端随着规范化&#xff0c;可以说规范和环境插件配置满天飞&#xff0c;笔者最早接触的是jquery&#xff0c;那个开发非常简单&#xff0c;只要引入jquery就可以了&#xff0c;当时还写了一套UI框架&#xff0c;至今在做小型项目中还在使用&#xff0c;show一张效果…

一款颜值颇高的虚拟列表!差点就被埋没了,终于还是被我挖出来了

大家好&#xff0c;我是晓衡&#xff01; 今天&#xff0c;推荐一款颇有颜值的虚拟列表组件&#xff0c;不然真的被埋没就可惜了&#xff01; 我们先来看下效果&#xff1a; 感觉怎么样&#xff1f;还不错吧&#xff01; 为什么说这个资源差点被埋没呢&#xff1f;因为个朋友找…

用数据,简单点!奇点云2024 StartDT Day数智科技大会,直播见

在充满挑战的2024&#xff0c;企业如何以最小化的资源投入和试错成本&#xff0c;挖掘新的增长机会&#xff0c;实现确定性发展&#xff1f; “简单点”是当前商业环境的应对策略&#xff0c;也是奇点云2024 StartDT Day的核心理念。 5月28日&#xff0c;由奇点云主办的2024 S…

Linux —— 信号量

Linux —— 信号量 什么是信号量P操作&#xff08;Wait操作&#xff09;V操作&#xff08;Signal操作&#xff09;信号量的类型 一些接口POSIX 信号量接口&#xff1a;其他相关命令&#xff1a; 基于循环队列的生产者和消费者模型同步关系 多生产多消费 我们今天接着来学习信号…

【译】组复制和 Percona XtraDB 集群: 常见操作概述

原文地址&#xff1a;Group Replication and Percona XtraDB Cluster: Overview of Common Operations 在这篇博文中&#xff0c;我将概述使用 MySQL Group Replication 8.0.19&#xff08;又称 GR&#xff09;和 Percona XtraDB Cluster 8 (PXC)&#xff08;基于 Galera&…

Jetbrains插件AI Assistant,终于用上了

ai assistant激活成功后&#xff0c;如图 ai assistant获取&#xff1a;https://web.52shizhan.cn/activity/ai-assistant 主要功能如下

计算机毕业设计hadoop+spark微博舆情大数据分析 微博爬虫可视化 微博数据分析 微博采集分析平台 机器学习(大屏+LSTM情感分析+爬虫)

电商数据建模 一、分析背景与目的 1.1 背景介绍 电商平台数据分析是最为典型的一个数据分析赛道&#xff0c;且电商数据分析有着比较成熟的数据分析模型&#xff0c;比如&#xff1a;人货场模型。此文中我将通过分析国内最大的电商平台——淘宝的用户行为&#xff0c;来巩固数…

算法打卡 Day13(栈与队列)-滑动窗口最大值 + 前 K 个高频元素 + 总结

文章目录 Leetcode 239-滑动窗口最大值题目描述解题思路 Leetcode 347-前 K 个高频元素题目描述解题思路 栈与队列总结 Leetcode 239-滑动窗口最大值 题目描述 https://leetcode.cn/problems/sliding-window-maximum/description/ 解题思路 在本题中我们使用自定义的单调队列…

C语言指针指针和数组笔试题(必看)

前言&#xff1a; 前面介绍了指针的大体内容&#xff0c;如果接下来能够把这些代码的含义搞得清清楚楚&#xff0c;那么你就是代码king&#xff01; 一维数组&#xff1a; int a[] {1,2,3,4}; printf("%d\n",sizeof(a)); printf("%d\n",sizeof(a0)); pr…

element-ui输入框和多行文字输入框字体不一样解决

element-ui的type"textarea"的字体样式与其他样式不同 <el-input type"textarea"></el-input> <el-input ></el-input>设置&#xff1a; .el-textarea__inner::placeholder {font-family: "Helvetica Neue", Helvetic…

删除MySQL中所有表的外键

方法一&#xff1a; 原理 查询schema中所有外键名称然后拼接生成删除语句 第一步&#xff1a; SELECT CONCAT(ALTER TABLE ,TABLE_SCHEMA,.,TABLE_NAME, DROP FOREIGN KEY ,CONSTRAINT_NAME, ;) FROM information_schema.TABLE_CONSTRAINTS c WHERE c.TABLE_SCHEMA数据库名…

Linux修炼之路之自动化构建工具,进度条,gdb调试器

目录 一&#xff1a;自动化构建工具make/makefile 生成内容&#xff1a; 清理内容&#xff1a; 对于多过程的&#xff1a; 对于多次make&#xff1a; 特殊符号&#xff1a; 二&#xff1a;小程序之进度条 三&#xff1a;git的简单介绍 四&#xff1a;Linux调试器gdb 接…

fpga 提高有什么进阶书推荐?

到FPGA中后期的时候就要开始接触&#xff0c;如&#xff1a;高速接口、光纤数字信号处理等项目实践了&#xff0c;那么我们可以读一些书进行提升&#xff0c;大家可以收藏下。 高速接口项目《嵌入式高速串行总线技术:基于FPGA实现与应用》作者&#xff1a;张锋 FPGA提升书籍推…

Go团队:Go是什么

2024年的Google I/O大会[1]如期而至。 这届大会的核心主旨毫无疑问是坚定不移的以AI为中心&#xff1a;Google先是发布了上下文长度将达到惊人的200万token的Gemini 1.5 Pro[2]&#xff0c;然后面对OpenAI GPT-4o的挑衅&#xff0c;谷歌在大会上直接甩出大杀器Project Astra[3]…