1152: 二分搜索

1152: 二分搜索

时间限制: 1 Sec  内存限制: 128 MB
提交: 2096  解决: 756
[提交][状态][讨论版][命题人:admin]

题目描述

在有序序列中查找某一元素x。

输入

首先输入一个正整数n(n<=100000),表示该序列有n个整数,然后按从小到大的顺序输入n个整数;

接着是一个正整数m,表示有m次查找;

最后是m个整数,表示m个要查找的整数x。

输出

对于每一次查找,有一行输出。若序列中存在要查找的元素x,则输出元素x在序列中的序号(序号从0开始);若序列中不存在要查找的元素x,则输出"Not found!"。

样例输入

5
1 3 5 7 9 
11
-1
1
2
3
4
5
6
7
8
9
10

样例输出

Not found!
0
Not found!
1
Not found!
2
Not found!
3
Not found!
4
Not found!

查找区间左闭右开
#include<iostream>


using namespace std ; 

#define maxn 110000

int n , m , x ;
int num[maxn] ;  
bool flag ; 
int pos ; 

void check(int start , int ends , int x){
    if(ends<start){
        return;
    }
    int mid = (start+ends)/2 ;
    if(num[mid] == x){
        pos = mid ; 

        flag = true ; 
        return; // 找到
    }else if(x<num[mid]){
        check(start , mid-1 , x) ; 
    }else if(x>num[mid]){
        check(mid+1 , ends , x) ; 
    }

}

int main(){
    cin>>n ; 
    for(int i=0 ; i<n ; i++){
        cin>>num[i] ; 
    }
    cin>>m ; 
    while(m--){
        cin>>x ; 
        flag = false ; 
        check( 0 , n , x) ; 
        if(flag==false){
            cout<<"Not found!"<<endl ; 
        }else{
            cout<<pos<<endl ; 
        }
    }

    return 0 ; 
}
原文地址:https://www.cnblogs.com/yi-ye-zhi-qiu/p/8902505.html