数据结构上机实验之二分查找【二分查找】【递归与非递归算法示例】

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

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

题目描述

题目链接:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2039

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

输入

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

输出

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

示例输入

4
1 3 5 8
3

示例输出

YES

提示

代码:

 

 1 #include<iostream>
 2 #include<string.h>
 3 using namespace std;
 4 int f[5000000];
 5 int binsearch(int l,int e,int key);
 6 int binsearchx(int l,int e,int key);
 7 int main()
 8 {
 9     int n;
10     while(cin>>n)
11     {
12         int i;
13         for(i=1;i<=n;i++)
14             cin>>f[i];
15         int key;
16         cin>>key;
17         int flag=-1;
18         //flag=binsearch(1,n,key);
19         flag=binsearchx(1,n,key);
20         if(flag==-1)cout<<"NO"<<endl;
21         else cout<<"YES"<<endl;
22     }
23     return 0;
24 }
25 int binsearch(int e,int l,int key)//二分查找非递归算法
26 {
27     int low=1,high=l;
28     int mid;
29     while(low<=high)
30     {
31         mid=(low+high)/2;
32         if(f[mid]==key)return mid;
33         else if(key<f[mid])high=mid-1;
34         else low=mid+1;
35     }
36     return -1;
37 }
38 int binsearchx(int e,int l,int key)//二分查找递归算法
39 {
40     int mid=(e+l)/2;
41     if(f[mid]==key)return mid;
42     else if(f[mid]>key)return binsearch(e,mid-1,key);
43     else if(f[mid]<key)return binsearch(mid+1,l,key);
44     return -1;
45 }
View Code

 

posted @ 2013-12-21 20:55  狂盗一枝梅  阅读(483)  评论(0编辑  收藏  举报