您的位置:首页 > 其它

二分查找(递归与非递归)

2012-11-17 10:19 585 查看
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <stdlib.h>
#include <vector>

using namespace std;
int temp = -1;
const int maxn = 10000;

int bsearch2(int *t, int b, int e, int val){
int mid =(b+e)/2;
if(t[mid] == val) { temp = mid; return temp; }
if(b == e) { return 0; }
if(t[mid] < val){
bsearch2(t, mid+1, e, val);
}
else{
bsearch2(t, b, mid, val);
}
return temp;
}

int bsearch1(int *A, int x, int y, int v) {
int m;
while(x <= y) {
m = x + (y-x)/2;
if(A[m] == v) { return m; }
else if(A[m] > v) {
y = m;
}
else {
x = m + 1;
}
}
return -1;
}

int main() {
int a[maxn];
int n, val;
scanf("%d", &n);
for(int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
printf("please input the value you want to find:\n");
while(scanf("%d", &val) != EOF) {
int res = bsearch1(a, 0, n-1, val);
if(res != -1) {
printf("%d\n", res);
}
else {
printf("not find it1\n");
}
}
printf("please input the second value :\n");
while(scanf("%d", &val) != EOF) {
int res = bsearch2(a, 0, n-1, val);
if(res != -1) {
printf("%d\n", res);
temp = -1;
}
else{
printf("not find it!\n");
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: