C++ 中二分查找递归非递归实现并分析
发布时间 - 2026-01-11 01:44:49 点击率:次C++ 中二分查找递归非递归实现并分析

二分查找在有序数列的查找过程中算法复杂度低,并且效率很高。因此较为受我们追捧。其实二分查找算法,是一个很经典的算法。但是呢,又容易写错。因为总是考虑不全边界问题。
用非递归简单分析一下,在编写过程中,如果编写的是以下的代码:
#include<iostream>
#include<assert.h>
using namespace std;
int binaty_search(int* arr, size_t n, int x)
{
assert(arr);
int left = 0;
int right = n - 1;
while (left <= right)
{
int mid = (left + right) / 2;
if (x < arr[mid])
{
right = mid-1;
}
else if (x > arr[mid])
{
left = mid+1;
}
else
return mid;
}
return -1;
}
int main()
{
int arr[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
cout << binaty_search(arr, sizeof(arr) / sizeof(int), 0) << endl;
cout << binaty_search(arr, sizeof(arr) / sizeof(int), 1) << endl;
cout << binaty_search(arr, sizeof(arr) / sizeof(int), 2) << endl;
cout << binaty_search(arr, sizeof(arr) / sizeof(int), 3) << endl;
cout << binaty_search(arr, sizeof(arr) / sizeof(int), 4) << endl;
cout << binaty_search(arr, sizeof(arr) / sizeof(int), 5) << endl;
cout << binaty_search(arr, sizeof(arr) / sizeof(int), 6) << endl;
cout << binaty_search(arr, sizeof(arr) / sizeof(int), 7) << endl;
cout << binaty_search(arr, sizeof(arr) / sizeof(int), 8) << endl;
cout << binaty_search(arr, sizeof(arr) / sizeof(int), 9) << endl;
cout << binaty_search(arr, sizeof(arr) / sizeof(int), 10) << endl;
return 0;
}
那么我们可以简单分析一下:
如果是以下这样的代码实现:
#include<iostream>
#include<assert.h>
using namespace std;
int binaty_search(int* arr, size_t n, int x)
{
assert(arr);
int left = 0;
int right = n;
while (left < right)
{
int mid = (left + right) / 2;
if (x < arr[mid])
{
right = mid;
}
else if (x > arr[mid])
{
left = mid + 1;
}
else
return mid;
}
return -1;
}
int main()
{
int arr[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
cout << binaty_search(arr, sizeof(arr) / sizeof(int), 0) << endl;
cout << binaty_search(arr, sizeof(arr) / sizeof(int), 1) << endl;
cout << binaty_search(arr, sizeof(arr) / sizeof(int), 2) << endl;
cout << binaty_search(arr, sizeof(arr) / sizeof(int), 3) << endl;
cout << binaty_search(arr, sizeof(arr) / sizeof(int), 4) << endl;
cout << binaty_search(arr, sizeof(arr) / sizeof(int), 5) << endl;
cout << binaty_search(arr, sizeof(arr) / sizeof(int), 6) << endl;
cout << binaty_search(arr, sizeof(arr) / sizeof(int), 7) << endl;
cout << binaty_search(arr, sizeof(arr) / sizeof(int), 8) << endl;
cout << binaty_search(arr, sizeof(arr) / sizeof(int), 9) << endl;
cout << binaty_search(arr, sizeof(arr) / sizeof(int), 10) << endl;
return 0;
}
那么可以简单分析一下为:
同样,递归实现的条件也分为两种,我就只演示一种,代码如下:
#include<iostream>
#include<assert.h>
using namespace std;
int binaty_srarch(int* arr, int x, int left, int right)
{
assert(arr);
int mid;
if (left <= right)
{
mid = (left + right) / 2;
if (arr[mid] == x)
{
return mid;
}
else
if (x < arr[mid])
{
return binaty_srarch(arr, x, left, right - 1);
}
else if (x>arr[mid])
{
return binaty_srarch(arr, x, left + 1, right);
}
}
return -1;
}
int main()
{
int arr[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
cout << binaty_srarch(arr, 0, 0, (sizeof(arr) / sizeof(int)) - 1) << endl;
cout << binaty_srarch(arr, 1, 0, (sizeof(arr) / sizeof(int)) - 1) << endl;
cout << binaty_srarch(arr, 2, 0, (sizeof(arr) / sizeof(int)) - 1) << endl;
cout << binaty_srarch(arr, 3, 0, (sizeof(arr) / sizeof(int)) - 1) << endl;
cout << binaty_srarch(arr, 4, 0, (sizeof(arr) / sizeof(int)) - 1) << endl;
cout << binaty_srarch(arr, 5, 0, (sizeof(arr) / sizeof(int)) - 1) << endl;
cout << binaty_srarch(arr, 6, 0, (sizeof(arr) / sizeof(int)) - 1) << endl;
cout << binaty_srarch(arr, 7, 0, (sizeof(arr) / sizeof(int)) - 1) << endl;
cout << binaty_srarch(arr, 8, 0, (sizeof(arr) / sizeof(int)) - 1) << endl;
cout << binaty_srarch(arr, 9, 0, (sizeof(arr) / sizeof(int)) - 1) << endl;
cout << binaty_srarch(arr, 10, 0, (sizeof(arr) / sizeof(int)) - 1) << endl;
return 0;
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# C++
# 二分查找
# 二分查找递归非递归
# 查找算法之二分查找的C++实现
# C++二分查找算法实例
# C++二分查找(折半查找)算法实例详解
# 二分查找算法在C/C++程序中的应用示例
# python中二分查找法的实现方法
# python实现二分查找算法
# Pythonic版二分查找实现过程原理解析
# Python如何实现的二分查找算法
# c++与python实现二分查找的原理及实现
# 递归
# 过程中
# 的是
# 是一个
# 我就
# 两种
# 我们可以
# 很高
# 希望能
# 谢谢大家
# 不全
# include
# cpp
# lt
# gt
# iostream
# strong
# br
# pre
# brush
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何用好域名打造高点击率的自主建站?
JavaScript实现Fly Bird小游戏
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道
如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)
jquery插件bootstrapValidator表单验证详解
js实现获取鼠标当前的位置
JavaScript如何实现音频处理_Web Audio API如何工作?
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】
javascript中的try catch异常捕获机制用法分析
如何快速搭建支持数据库操作的智能建站平台?
如何快速搭建高效WAP手机网站吸引移动用户?
详解Android图表 MPAndroidChart折线图
Android利用动画实现背景逐渐变暗
,交易猫的商品怎么发布到网站上去?
Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解
如何用搬瓦工VPS快速搭建个人网站?
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询
如何在阿里云ECS服务器部署织梦CMS网站?
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
在Oracle关闭情况下如何修改spfile的参数
标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析
如何在万网自助建站中设置域名及备案?
如何在橙子建站上传落地页?操作指南详解
Laravel如何实现模型的全局作用域?(Global Scope示例)
Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】
韩国服务器如何优化跨境访问实现高效连接?
如何在IIS服务器上快速部署高效网站?
Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制
如何快速生成专业多端适配建站电话?
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
香港服务器建站指南:免备案优势与SEO优化技巧全解析
VIVO手机上del键无效OnKeyListener不响应的原因及解决方法
Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】
Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?
Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程
如何安全更换建站之星模板并保留数据?
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
网站页面设计需要考虑到这些问题
javascript日期怎么处理_如何格式化输出
网站制作软件免费下载安装,有哪些免费下载的软件网站?
魔方云NAT建站如何实现端口转发?
Laravel怎么生成URL_Laravel路由命名与URL生成函数详解
Laravel怎么为数据库表字段添加索引以优化查询
JavaScript中如何操作剪贴板_ClipboardAPI怎么用

