贴上二分能解决的问题的基本特征:
该问题的规模缩小到一定的程度就可以容易解决
该问题可以分解为若干个规模较小的相同问题
该问题所分解出的各个子问题是相互独立的
利用分解出的子问题的解可以合并为该问题的解
利用二分的前提条件:
有一组数已经按照从小到大(或者从大到小)排序
代码实现:
#include<stdio.h>
#include<algorithm>
#include<string.h>
#define N 10
using namespace std;
int a[N];
int binsearch(int x,int l,int r)
{
while(l <= r)
{
int mid = (l + r) /2;
if(a[mid] == x)
return mid;
else if(a[mid] > x)
r = mid - 1;
else
l = mid + 1;
}
return -1; //如果查找的数据不在数组a[]中,返回-1代表没有
}
int main()
{
int x,index;
printf("请从小到大输入10个数\n");
for(int i=0;i<N;i++)
scanf("%d",&a[i]);
printf("请输入你要查找的数x\n");
scanf("%d",&x);
index = binsearch(x,0,N);
if(index == -1)
printf("%d is no found!\n",x);
else
printf("find %d == a[%d] !\n",x,index);
}
运行结果显示: