C语言二分查找的区间问题

概念

什么是二分查找呢?
二分查找:在有序数组中查找某一特定元素的搜索算法。

二分查找又称折半查找,通过将数组折半,用中间值和查找值作比较,多次使用,直到找到要查找的值。
注意:二分查找的前提是,数组必须是要有序的。

二分查找

c 复制代码
int main()
{
	int arr[5] = { 1,2,3,4,5 };
	int begin = 0;
	int end = 4;
	int x = 2;
	int mid = 0;
	while (begin <= end)
	{
		mid = begin + ((end - begin) >> 1);
		if (arr[mid] > x)
			end = mid - 1;
		else if (arr[mid] < x)
			begin = mid + 1;
		else
			break;
	}
	printf("下标是%d\n", mid);
	return 0;
}


区间问题

1.需要注意的是,以上的代码是用的闭区间,保持左闭右开的区间,即(begin=0,end=4)但是还有一种是左闭右开的区间(begin=0,end=5)

那么我们接下来讲一讲左闭右开的区间

c 复制代码
int main()
{
	int arr[5] = { 1,2,3,4,5 };
	int begin = 0;
	int end = 5;
	int x = 2;
	int mid = 0;
	while (begin < end)//这里是小于,不是小于等于
	{
		mid = begin + ((end - begin) >> 1);
		if (arr[mid] > x)
			end = mid;//这里不会减一了
		else if (arr[mid] < x)
			begin = mid + 1;
		else
			break;
	}
	printf("下标是%d\n", mid);
	return 0;
}

代码的不同,我已经标注出来了

如果我们继续使用end=mid-1的话,看一看会有什么效果。

因此,我们在使用二分查找的时候,需要注意它的区间和循环条件。

相关推荐
basketball6164 分钟前
Go语言从入门到进阶:8. 接口
开发语言·后端·golang
gCode Teacher 格码致知6 分钟前
Python教学:字符编码的四种环境-由Deepseek产生
开发语言·python
铁链鞭策大师9 分钟前
JavaEE之多线程
java·开发语言·java-ee
我是唐青枫13 分钟前
Java Optional 实战指南:优雅处理空值与链式转换
java·开发语言
basketball61624 分钟前
设计模式入门:2. 工厂模式详解 C++实现
开发语言·c++·设计模式
Lumbrologist24 分钟前
【C++】零基础入门 · 第 16 节:智能指针
开发语言·c++
yu859395825 分钟前
MATLAB 分支定界法(Branch and Bound)实现
开发语言·matlab
埃菲尔铁塔_CV算法30 分钟前
基于扩张卷积与双分支参数调控的低光照图像增强算法完整研究与工程解析
人工智能·神经网络·算法·机器学习·计算机视觉
学会去珍惜30 分钟前
c语言编程 C语言入门 c语言(C语言程序设计教程 c语言视频教程 c语言零基础
c语言·开发语言
迈巴赫车主34 分钟前
优先队列(PriorityQueue)
数据结构·算法