二分搜索

二分搜索

题目描述

给定n个元素,使用二分法从中查找特地元素x。

输入

包含T组数据。先给定一个T。每组数据第一行是n,第二行是n个数。第三行为要查找的数x

T<2000,n<100000

输出

先输出排序后的数组。如果找到x,则输出x的位置;如果没找到,输出“-1”。

样例输入

1
11
60 17 39 15 8 34 30 45 5 52 25
17

样例输出

5 8 15 17 25 30 34 39 45 52 60
4

提示

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        int n;
        cin>>n;
        int a[100005];
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
        }
        sort(a+1,a+n+1);
        int x;
        cin>>x;
        int l=1,r=n;
        int mid;
        while(l<=r)
        {
            mid=(l+r)/2;
            if(a[mid]<x)
            {
                l=mid+1;
            }
            else if(a[mid]>x){
                r=mid-1;
            }
            else{
                l=mid;
                break;
            }
        }
        for(int i=1;i<=n;i++)
        {
            if(i!=n)
                cout<<a[i]<<" ";
            else
                cout<<a[i]<<endl;
        }
        if(a[l]==x)
            cout<<l<<endl;
        else
            cout<<-1<<endl;

    }

    return 0;
}

或者

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        int n;
        cin>>n;
        int a[100005];
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
        }
        sort(a+1,a+n+1);
        int x;
        cin>>x;
        int l=1,r=n;
        int mid;
        while(l<=r)
        {
            mid=(l+r)/2;
            if(a[mid]<x)
            {
                l=mid+1;
            }
            else if(a[mid]>x){
                r=mid-1;
            }
            else{
                r=mid;
                break;
            }
        }
        for(int i=1;i<=n;i++)
        {
            if(i!=n)
                cout<<a[i]<<" ";
            else
                cout<<a[i]<<endl;
        }
        if(a[r]==x)
            cout<<r<<endl;
        else
            cout<<-1<<endl;

    }

    return 0;
}

 

posted on 2019-03-01 09:14 蔡军帅_ACM 阅读(...) 评论(...) 编辑 收藏
posted on 2019-03-01 09:14  蔡军帅  阅读(90)  评论(0编辑  收藏  举报