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