[算法] 二分查找(C++)
不想废话了!
条件:升序数组;
结果:找得到的话返回 数组下标,找不到则返回 -1 ;
循环
//二分查找-循环(升序数组) int binarySearch(vector<int>& nums, int target) { int start = 0, end = nums.size() - 1, mid = 0; while (start <= end) { //mid=(start+end)/2; //可以用这个,但是 "start+end" 有可能会造成溢出 mid = start + (end - start) / 2; if (nums[mid] == target) return mid; else if (nums[mid] > target) end = mid - 1; else start = mid + 1; } return -1; }
递归
int search(vector<int>& nums, int target) { return binarySearch(nums, target, 0, nums.size() - 1); } //二分查找-递归(升序数组) int binarySearch(vector<int>& nums, int target, int start, int end) { if (start > end) return -1; int mid = (start + end) / 2; if (nums[mid] == target) return mid; else if (nums[mid] > target) //大于目标,则需要往前找 return binarySearch(nums, target, start, mid - 1); else //小于目标,则需往后找 return binarySearch(nums, target, mid + 1, end); }
三个部分
- 终止条件;
- 中间值是否符合;
- 继续查找;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现