二分

二分

概念:二分,是二分查找的简称,又叫折半查找,是一种用于快速查找的工具,也可以说是一种技巧与思想。
前提:数组必须是顺序结构。
举例:比如{1,22,54,78,100},我想找到22的序号(第几大的数),那么进行二分,首先这个数组的下限是l=1,上限是r=5,那么其中间值序号就为mid=(l+r)/2=3,然后比较序号为3的数和22的大小,结果是22小,所以改变上限,r=mid-1=2,然后再进行二分,mid=(l+r)/2=1,然后比较序号为1的数和22的大小,22大,所以改变下限,l=mid+1=2,然后再找2和2之间的中间数,mid=(l+r)/2=2,所以第2个数就是要找的数。
代码如下:

#include<cstdio>
int main(){
int a[10]={1,22,54,78,100},l=0,r=4,mid;
while(l<=r)
{
	mid=(l+r)/2;
	if(a[mid]>22)
		r=mid-1;
	if(a[mid]<22)
		l=mid+1;
	if(a[mid]==22)
		break;
}
    printf("%d",mid+1);
    return 0;
}

或者

```c
#include<cstdio>
int main(){
int a[10]={1,22,54,78,100},l=0,r=4,mid,ind;
while(l<=r)
{
	mid=(l+r)/2;
	if(a[mid]<=22)
		l=mid+1,ind=mid;
	else
		r=mid-1;
}
    printf("%d",ind+1);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值