1152: 二分搜索

Posted 0一叶0知秋0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 ; 
}

 

以上是关于1152: 二分搜索的主要内容,如果未能解决你的问题,请参考以下文章

UVA1152- 枚举 /二分查找

UVa 1152 和为0的4个值(二分查找)

UVA 1152 4 Values whose Sum is 0

UVa-1152 4 Values Whose Sum Is 0

UVa1152 4 Values whose Sum is 0 (中途相遇法)

如何使用伪代码开发线性搜索和二分搜索算法。?