🚩 WRITE IN FRONT 🚩
🔎 介绍:"謓泽"正在路上朝着"攻城狮"方向"前进四" 🔎
🏅 荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评百大博主、CSDN专家博主、华为云享专家、阿里云专家博主、掘金优秀创作者、全网粉丝量8w+、个人社区人数累计4w+、全网访问量100w+ 🏅
🆔 本文章内容由 謓泽 原创 如需相关转载请提前告知博主 ⚠
📑 创作时间:2022 年 11 月 2 日 📅
📝 个人主页:謓泽的博客 📃
📣 专栏系列:数据结构_謓泽的博客-CSDN博客📃
🙌 Gitee:謓泽 (wsxsx) - Gitee.com ⭐️
🎁 点赞👍+ 收藏⭐️+ 留言📝
✉️ 我们并非登上我们所选择的舞台,演出并非我们所选择的剧本 📩
概述
二分查找,也称为折半查找,是一种在有序数组中快速查找特定元素的算法。它的原理是通过将数组分成两半,并与目标元素进行比较,从而确定目标元素在哪一半中,然后再在该半部分继续进行二分查找,直到找到目标元素或确定目标元素不存在为止。
注意,二分查找使用的场合是要在有序数组的条件下进行的。
题目内容
在一个升序数组中查找指定的数值,找到了就返回下标,找不到就返回负一的值。
函数格式
cppint bin_search(int arr[], int left, int right, int key) // arr 是查找的数组 //left 数组的左下标 //right 数组的右下标 //key 要查找的数字代码
说明:在这里我们一共有两种方式去对题目的要求进行实现。
① 遍历方法
② 二分查找方法
所以:接下来謓泽都会用这两种方式带大家去实现。
cpp#pragma warning(disable:6031) #pragma message("二分查找法查找k的元素下标是否存在") #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main(void) { #if 1 //注意:在数据结构当中二分查找的时间复杂度的算法是:O(logn) int k = 0; printf("请输入k的元素值:"); scanf("%d", &k); int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int sz = sizeof(arr) / sizeof(arr[0]); int left = 0; int right = sz - 1; 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,元素%d\n", mid, arr[mid]); break; } } if (left > right) { printf("找不到!\n"); } #else // 遍历方式 int i = 0; int k = 7; int flag = 0; int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int sz = sizeof(arr) / sizeof(arr[0]); for (i = 0; i < sz; i++) { if (k == arr[i]) // 去比较下标 { flag = 1; // 找到了 printf("下标:%d\n", arr[i]); } } if (flag == 0) printf("没找到!\n"); #endif return 0; }
【数据结构】二分查找
謓泽2025-01-23 18:59
相关推荐
C雨后彩虹2 小时前
任务最优调度少林码僧4 小时前
2.31 机器学习神器项目实战:如何在真实项目中应用XGBoost等算法钱彬 (Qian Bin)4 小时前
项目实践15—全球证件智能识别系统(切换为Qwen3-VL-8B-Instruct图文多模态大模型)Niuguangshuo4 小时前
EM算法详解:解密“鸡生蛋“的机器学习困局a3158238064 小时前
Android 大图显示策略优化显示(一)一条大祥脚5 小时前
26.1.9 轮廓线dp 状压最短路 构造鲨莎分不晴5 小时前
反向传播的数学本质:链式法则与动态规划的完美共舞sonadorje5 小时前
逻辑回归中的条件概率cici158745 小时前
基于Pan-Tompkins算法的ECG信号HRV提取方案McGrady-1756 小时前
拓扑导航 vs 几何导航的具体实现位置