4.二分法!!!

                                                       二分法

二分法是一种查找方式,它的查找需要注意几个方面:

1.必须查找的是有序的序列。

2.可以查找某一个数,或者某一个数的下标。返回的值可以是要查找的数,或者与要查找的数接近的数。

简单来讲就是一直一半一半的取,直到找到最后的答案(flag=1),或者返回  flag=0。flag为标记变量,用来记录是否找到了结果。

下面来看来看例题,其实就是一个裸的二分法代码:

下面是实现的代码:

#include<stdio.h>
#include<string.h>
long long a[1000000];
void cha(long long t,long long n)
{
    long long left,right,mid,i,j,flag=0;
    left=0;
    right=n-1;
    while(right>=left)
    {
        mid=(right+left)/2;
        if(a[mid]>t)
            right=mid-1;
        else if(a[mid]<t)
            left=mid+1;
        else
        {
            flag=1;
            printf("YES\n");
            break;
        }
    }
    if(flag==0)
    {
        printf("NO\n");
    }
}
int main()
{
    long long i,j,k,n,t;
    while(scanf("%lld",&n)!=EOF)
    {
        memset(a,0,sizeof(a));
        for(i=0; i<=n-1; i++)
        {
            scanf("%lld",&a[i]);
        }
        scanf("%lld",&t);
        cha(t,n);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41886231/article/details/81146725
今日推荐