基于递归的折半查找
描述
请编写一个递归的折半查找算法,查找给定有序数组中的某一元素。
输入
多组数据,每组数据有三行。第一行为数组长度n,第二行为n个递增排列的数字,第三行为需要查找的数字k。当n=0时输入结束。
输出
每组数据输出一行,如果可以找到数字,则输出“YES”,否则输出“NO”。
样例输入1
5 1 4 6 7 8 6 6 1 2 5 7 9 100 8 0
样例输出1
YES NO
解答:二分查找。
#include<stdio.h>
#define maxn 200
void Find(int a[],int k,int low,int high)
{
if(low>high)
{
printf("NO\n");
return;
}
int mid=(low+high)/2;
if(a[mid]==k)
{
printf("YES\n");
return ;
}
else
{
if(k<a[mid])
Find(a,k,low,mid-1);
else
Find(a,k,mid+1,high);
}
}
int main()
{
int n,k;
int a[maxn];
while(1)
{
scanf("%d",&n);
if(n==0)
break;
for(int i=1; i<=n; i++)
scanf("%d",&a[i]);
scanf("%d",&k);
Find(a,k,1,n);
}
return 0;
}