#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 10005;
int a[maxn];
// 递归写法
int binary_search(int a[], int x, int l, int h) {
if(l <= h) {
int mid = (l + h) / 2;
if(a[mid] == x)
return mid;
if(a[mid] < x) {
binary_search(a, x, (l + h) / 2 + 1, h);
}
else {
binary_search(a, x, l, (l + h) / 2 - 1);
}
}
else
return -1;
}
// 非递归写法
int b_search(int a[], int x, int l, int h) {
int j = -1;
while((l <= h) && (j == -1)) {
int mid = (l + h) / 2;
if(a[mid] == x)
j = mid;
else if(x > a[mid]) {
l = mid + 1;
}
else {
h = mid - 1;
}
}
return j;
}
int main() {
int n;
while(cin >> n) {
for(int i = 0; i < n; i ++)
cin >> a[i];
sort(a, a + n);
int x;
cin >> x;
cout << b_search(a, x, 0, n - 1) << endl;
}
return 0;
}
二分查找(递归和非递归写法)
最新推荐文章于 2023-10-07 21:25:01 发布
本文详细介绍了二分查找算法的递归与非递归实现方式,并通过C++代码示例展示了如何进行有效的搜索操作。文章首先定义了问题背景,接着给出了具体的算法实现,并通过实例演示了如何使用该算法。
3160

被折叠的 条评论
为什么被折叠?



