C语言算法二分查找

本文介绍了二分查找算法,一种高效的查找方法,前提是数组必须有序。通过举例和代码实现展示了其工作原理,即反复将搜索范围缩小一半,直到找到目标值或确定不存在。作者还提到优化中间值计算的方法以提高代码效率。
摘要由CSDN通过智能技术生成

二分查找是一种高效的查找算法,但是有一个很重要的限制:数组必须要有序,不一定要连续,但是一定要有序。

我们看一个例子:在12345678910中找到自己需要的数字:

//函数实现二分查找
int Binary_search(int arr[], int a, int sz)
{
	int left = 0;
	int right = sz - 1;
	while (left <= right)
	{
		int mid = left + (right - left) / 2;//这样的中间值让代码更扛造
		if (arr[mid] > a)
		{
			right = mid - 1;
		}
		else if (arr[mid] < a)
		{
			left = mid + 1;
		}
		else
		{
			return mid;
		}
	}
	return -1;
}
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int a = 0;
	int sz = sizeof(arr) / sizeof(arr[1]);
	scanf("%d", &a);
	if (Binary_search(arr, a, sz) == -1)
	{
		printf("没找到");
	}
	else
	{
		printf("找到了,下标是 %d", Binary_search(arr, a, sz));
	}
}

二分查找就是每次都是一半,一半的找。 找到数组的第一个下标和最后一个下标,得到中间的下标,每次用中间下标的值,对比想要找的值,中间值比想要的值小,就把第一个下标改到中间下标的后一个下标上,再比较中间值和想要的值,如果中间值比想要值大,就把最后一个下标改到中间下标的前一个下标上,再比较中间值和想要的值。然后循环下去,直到找到了或者没找到。

中间值比想要的值小:

中间值比想要的值大:

ps:我们算中间值的方法有很多种,我这里用的方法可以让代码数字小点,扛造一点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值