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 "); } else{ printf("%d ",k); } } return 0; }