给大家介绍一种查找一个数是只有O(logn)的查找算法——二分。
俗称折半查找,每次取中间值,再基于中间值判断。
注意:待查找序列一定要是单调的。
题目见2249。
#include<bits/stdc++.h>
using namespace std;
int n,s;
int a[1000001];
int search(int h,int t,int x)
{
if(h==t)
{
if(a[h]==x)return h;
else return -1;
}
int mid=(h+t)/2;//二分的中间值
if(a[mid]>=x)
{
return search(h,mid,x);
}
else return search(mid+1,t,x);//右半区
}
int main()
{
scanf("%d%d",&n,&s);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
while(s--)
{
int t;
scanf("%d",&t);
int z=search(1,n,t);
printf("%d ",z);
}
return 0;
}
点个赞叭。