二分查找

数据结构上机实验之二分查找

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

 在一个递增的序列里,查找元素是否存在,若存在输出YES,不存在输出NO.

输入

 本题多组数据,首先输入一个数字n,然后输入n个数,数据保证数列递增,然后再输入一个查找数字。

输出

 若存在输出YES,不存在输出NO.

示例输入

4
1 3 5 8
3

示例输出

YES
#include<stdio.h>
int a[10000000];开数组是定义全局变量;
int main()
{
    int key, n, i;
    int low, high, mid;
   while( ~scanf("%d", &n))// 第一次没考虑多组输入;
   {
       int k=0;//应把k放在while循环里,每次输入n时都得初始化k;

    low = 1;
    high = n;
    for(i=1; i<=n; i++)
        scanf("%d", &a[i]);
    scanf("%d", &key);
    while(low<=high)
    {
        mid = (low+high)/2;
        if(key==a[mid])
        {
            k = mid; break;
        }
        else if(key<a[mid])
            high = mid -1;
        else
            low = mid + 1;
    }

    if(k!=0)
        printf("YES
");
    else
        printf("NO
");
   }
    return 0;
}

每天训练发现我比别人做的好慢,但是理解的更深刻,如果一开始学一个新知识点就搜模板,那么这样的人是走不远的,毕业之后带走的只有思维,什么荣誉,奖杯都已经不重要了。
原文地址:https://www.cnblogs.com/6bing/p/3931309.html