二分查找

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<stdio.h>
int binary_search(int key,int len,int a[]){
    int l=0,r=len-1;
    while(l<=r){
        int middle = (r-l)/2+l;
        if(a[middle]==key)
            return middle;
        else if(a[middle]>key){
            r = middle - 1;
        }
        else l = middle +1;
    }
    return -1;
}
int main(){
    int a[200002];
    int M,N,key;
    scanf("%d",&M);
    int i,j;
    for(i=0;i<M;i++){
        scanf("%d",&a[i]);
    }
    //要查找的关键字个数
    scanf("%d",&N);
    for(j = 0;j<N;j++){
        //要查找的关键字
        scanf("%d",&key);
        int k = binary_search(key,M,a);
        if(k==-1)
        {
            printf("Not Found\n");
        }
        else{
            printf("%d\n",k);
        }
    }
    return 0;

}

 

posted @ 2018-01-08 15:35  的川  阅读(219)  评论(0编辑  收藏  举报