折半查找必须是在一个有序数组里进行查找,每次查找一半,不符合则继续折半。
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <iostream>
using namespace std;
int flag=0,cnt=0;
int find(int a[],int tar,int num)
{
int low=0,high=num-1,mid;
while(low<=high)
{
cnt++;//计算查找次数;
mid=(low+high)/2;
if(a[mid]>tar)
{
//cnt++;
high=mid-1;
}
else if(a[mid]<tar)
{
//cnt++;
low=mid+1;
}
else if(a[mid]==tar)
{
//cnt++;
flag=1;//找到一个标记为1;
break;
}
}
return mid;
}
int main()
{
int num;//控制数组长度;
int a[1005],tar;
while(cin>>num)
{
int i;
for(i=0;i<num;i++)
cin>>a[i];
cin>>tar;
int k=find(a,tar,num);
if(flag==0)
{
cout<<"-1"<<endl;
cout<<cnt;
}
else
{
cout<<k<<endl;
cout<<cnt;
}
}
//system("pause");
return 0;
}