Description
二分查找又叫折半查找。它采用的是"分治策略"。
给出从小到大排好序的M个整数,查找是否存在某个整数,如果存在,则输出其位置。
Input
第一行是一个整数 M ( 0 < M ≤ 200000 ) 表示整数的个数。
接下来是M个整数,每个整数之间用一个空格分隔。
接下来一行是一个整数N,表示要查找的关键字个数。
接下来N个整数,表示要查找的关键字key。每个key之间一个空格分隔。
Output
对每个要查找的key,输出一行结果。
如果找到,输出key在这M个整数的位置,位置从0开始编号。
如果找不到,则输出 Not Found。
Sample Input
10
1 2 4 6 7 8 9 11 20 85
4
1 5 20 99
Sample Output
0
Not Found
8
Not Found
代码如下:
#include<bits/stdc++.h>
using namespace std;
int a[200010],f[200010];
void found(int i,int l,int r);
int main(){
int T,n;
while(scanf("%d",&n)!=EOF){
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
scanf("%d",&T);
for(int i=0;i<T;i++){
scanf("%d",&f[i]);
}
for(int i=0;i<T;i++){
found(i,0,n-1);
}
}
return 0;
}
void found(int i,int l,int r){
int m;//中间数的下标
while(l<=r){
m=(l+r)/2;
if(a[m]==f[i]){
printf("%d\n",m);
return;
}else if(a[m]>f[i]){
r=m-1;
}else{
l=m+1;
}
}
printf("Not Found \n");
}