二分

二分

概念:二分,是二分查找的简称,又叫折半查找,是一种用于快速查找的工具,也可以说是一种技巧与思想。
前提:数组必须是顺序结构。
举例:比如{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;
}

posted @ 2018-11-28 17:06  Cherish486  阅读(174)  评论(0编辑  收藏  举报