Description
Input
Output
Sample Input
5 1 3 5 7 9 3 1 5 8
Sample Output
1
3
-1
二分查找又叫折半查找,即在一个有序表中,查找某一关键字。首先记录中间位置的关键字,与查找的关键字比较,若相等则成功,否则利用记录的中间位置将序列分成两个子表,如果中间位置关键字大于查找关键字,则查找大于中间位置的子表,否则查找小于的中间位置的子表。重复以上过程直到找到满足条件的记录,或者子表不存在为止。
优点:优点是比较次数少,查找速度快,平均性能好。
缺点:其缺点是要求待查表为有序表,且插入删除困难,适用于不经常变动而查找频繁的有序列表。
#include <iostream>
using namespace std;
int a[3000005];
int Binsearch(int a[],int l,int r,int t)
{
int mid;//中间位置
if(l>r)return -1;
mid=(l+r)/2;
if(a[mid]==t)return mid;
else if(a[mid]>t)
return Binsearch(a,l,mid-1,t);
else
return Binsearch(a,mid+1,r,t);
}
int main()
{
int i,n,N;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>a[i];
}
cin>>N;
while(N--)
{
int t,k;
cin>>t;
k=Binsearch(a,1,n,t);
cout<<k<<endl;
}
return 0;
}