0
点赞
收藏
分享

微信扫一扫

【学习笔记】二分查找

zmhc 2022-01-17 阅读 60
c++二分法

基本介绍

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法,但是要求数组必须有序,时间复杂度为O(log2n)。

基本用法

在有序数列中查找特定元素,思路:将数列中间位置记录的元素与查找元素比较,如果两者相等,则直接返回;否则利用中间位置记录将数列分成前、后两个子表,如果中间位置记录的元素大于查找元素,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

int binarySearch(int l,int r,int x)//a[l...r]中是否存在x 
{
	if(l>r)
		return -1;
	int mid=(l+r)/2;
	if(a[mid]==x)
		return mid;
	if(a[mid]<x)
		return binarySearch(mid+1,r,x);
	else
		return binarySearch(l,mid-1,x);
}

进阶用法

查找大于x的最小的数

int larger(int x)//a中大于x的最小的数的下标
{
	int l=0,r=n;
	int mid;
	while(l<r)
	{
		mid=(l+r)/2;
		if(a[mid]>x)
			r=mid;
		else
			l=mid+1;
	}
	return l;
}

查找小于x的最大的数

int smaller(int x)//a中小于x的最大的数的下标
{
	int l=-1,r=n-1;
	int mid;
	while(l<r)
	{
		mid=(l+r+1)/2;
		if(a[mid]<x)
			l=mid;
		else
			r=mid-1;
	}
	return l;
}

举报

相关推荐

0 条评论