基于递归的折半查找
描述
请编写一个递归的折半查找算法,查找给定有序数组中的某一元素。
输入
多组数据,每组数据有三行。第一行为数组长度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<iostream>
using namespace std;
#define Max 100
void Search(int a[], int k,int low,int high) {
if (low > high) {
cout<< "NO" << endl;
return;
}
int mid = (low + high) / 2;
if (a[mid] == k) {
cout << "YES" << endl;
return;
}
else if(a[mid]>k){
Search(a, k, low, mid - 1);
}
else {
Search(a, k, mid + 1, high);
}
}
int main() {
int a[Max];
int n;
while (cin >> n && n != 0) {
for (int i = 0; i < n; i++) {
cin >>a[i];
}
int k;
cin >> k;
Search(a, k,0,n-1);
}
}