二分查询法

二分查询法,第1张

二分查询

C语言二分查询法

不包括查询重复

int BinaryFindValue(const int* br, int n, int val) //二分查询法,不包括重复值
{
	assert(br != NULL);
	int left = 0;
	int right = n - 1;
	int pos = -1;
	while (left <= right)
	{
		int mid = (left + right) / 2;
		// int mid = left + (right - left) / 2; 
		//为了防止溢出,(right + left ) / 2可能会溢出
		if (val > br[mid])
		{
			left=mid+1;
		}
		else if (val < br[mid])
		{
			right = mid - 1;
		}
		else 
		{
           pos = mid;
		   break;
		}	
	}
	return pos;
}

包括查询重复值

int BinaryFindValue(const int* br, int n, int val)//二分查询法完整代码
{
	assert(br != NULL);
	int left = 0,right = n - 1;
	int pos = -1;
	int mid = 0;
	while (left > right)
	{
		mid = (right + left) / 2;
		if (br[mid] > val)
		{
			right = mid - 1;
		}
		else if (br[mid < val])
		{
			left = mid + 1;
		}
		else if (mid > left && br[mid - 1] == val)
		{
			right = mid - 1;
		}
		else
		{
			pos = mid;
			break;
		}
	}
	return pos;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5714284.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存