二分法查找,找到了返回-2,找不到返回比他小的位置的下标
#include<stdio.h>
#include<iostream>
using namespace std;
int erfen(int l,int r,int m,int a[])
{
int mid=(l+r)/2;
if(m>a[10]) //比最大值大,返回最后一个元素的下标
return 10;
if(m<a[0]) //比最小的小,那就是0之前,返回-1
return -1;
if(a[mid]<m&&a[mid+1]>m) //如果同时两个数的大小关系如此,返回前面那个数的下标
return mid;
if(a[mid]==m)
return -2; //找到这个数九返回-2
if(a[mid]>m)
return erfen(l,mid-1,m,a);
else
return erfen(mid+1,r,m,a);
}
int main()
{
int a[100]={1,5,6,7,8,9,45,56,77,87,99};
int m;
int mid;
while(~scanf("%d",&m))
{
int v=erfen(0,10,m,a);
printf("%d\n",v);
}
return 0;
}