读书人

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

发布时间: 2012-11-25 11:44:31 作者: rapoo

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

#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;}

读书人网 >编程

热点推荐