二分查找 题解

来源:互联网 发布:conoha绑定域名 编辑:程序博客网 时间:2024/05/24 15:43

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

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

题目描述

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

输入

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

输出

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

示例输入

41 3 5 83

示例输出

YES


心得:二分查找之前数组必须是有序的,每次都和中间值比较,逐步缩小范围。。      (坚信努力会有收获! 每天一个算法,加油!)

代码:

  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. int main()  
  4. {  
  5.     int a[100020],n,m,i;  
  6.     int low,high,mid;  
  7.     while(~scanf("%d",&n))  
  8.     {  
  9.         for(i=0;i<n;i++)  
  10.         {  
  11.             scanf("%d",&a[i]);  
  12.         }  
  13.         scanf("%d",&m);  
  14.         low=0;  
  15.         high=n;  
  16.         mid=(low+high)/2;  
  17.         while(low<=high)  
  18.         {  
  19.             if(a[mid]<m)  
  20.             {  
  21.                 low=mid+1;  
  22.             }  
  23.             else if(a[mid]>m) high=mid-1;  
  24.             else break;  
  25.             mid=(low+high)/2;  
  26.         }  
  27.         if(low<=high) printf("YES\n");  
  28.         else  printf("NO\n");  
  29.     }  
  30.   
  31.     return 0;  

0 0
原创粉丝点击