0
点赞
收藏
分享

微信扫一扫

二分查找(I)

夏侯居坤叶叔尘 2022-02-28 阅读 37
#include<stdio.h>
int a[100001];
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i=0;i<n;i++)
    scanf("%d",&a[i]);
    for(int i=0;i<m;i++)
    {
        int x;
        scanf("%d",&x);
        int low,mid,high;
        low=0;
        high=n-1;
        mid=(low+high)/2;
        while(low<high)
    {
        if(a[mid]<x)
        {
            low=mid+1;//找大于等于的,那么如果mid小于x的话直接舍去
            mid=(low+high)/2;
        }
        else
        {
            high=mid;//如果大于等于则保留此mid
            mid=(low+high)/2;
        }
         
    }
    if(a[low]>=x)
    printf("%d ",low+1);
    else
    printf("NO ");
    //以下找大于
        low=0;
        high=n-1;
        mid=(low+high)/2;
    while(low<high)
    {
        if(a[mid]<=x)
        {
            low=mid+1;//同理小于等于直接舍去
            mid=(low+high)/2;
        }
        else
        {
            high=mid;//大于保留
            mid=(low+high)/2;
        }
         
    }
    if(a[low]>x)
    printf("%d\n",low+1);
    else
    printf("NO\n");
         
}
}
举报

相关推荐

0 条评论