2872=M--二分查找

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 int a[3000000];
 5 int find(int q,int left,int right)
 6 {
 7     int x,y;
 8     x=left;
 9     y=right;
10     int mid;
11     mid=(x+y)/2;
12     if(q==a[mid])
13     {
14         return mid;
15     }
16     if(x>=y)return -1;//和之前的的二分查找一样,但是某些条件及范围不一样,注意题目要求即可。
17     if(q<a[mid])return find(q,x,mid-1);
18     else  return find(q,mid+1,y);
19 
20 }
21 int main()
22 {
23     int n,m;
24     scanf("%d",&n);
25     int i;
26     for(i=0; i<n; i++)
27     {
28         scanf("%d",&a[i]);
29     }
30     int b;
31     scanf("%d",&m);
32     for(i=0; i<m; i++)
33     {
34         scanf("%d",&b);
35         if(find(b,0,n-1)!=-1)
36         printf("%d\n",find(b,0,n-1)+1);
37         else printf("-1\n");
38     }
39     return 0;
40 }

 

posted @ 2019-04-02 22:11  念文丶  阅读(283)  评论(0编辑  收藏  举报