首页 > 代码库 > 二分查找*递归*与*非递归

二分查找*递归*与*非递归

二分查找感觉还是挺简单的,我写的这程序是处理有序表的查找,主要思想是这么回事:
已知元素个数,找到位于中间元素的值a[mid],并与要找的value比较,如果大于,那么就从0到mid-1中继续查找。

要考虑的问题,如果元素个数为0,数组中没有要查找的元素,还有找到元素怎么返回。

#include<cstdio>#include<algorithm>#include<iostream>using namespace std;#define MAX 1000int cos;void find(int a[],int v,int l,int r){    if(l>r)    {       cos=-1;       return;    }    int mid=(l+r)/2;    if(a[mid]>v)    find(a,v,l,mid-1);    else if(a[mid]<v)    find(a,v,mid+1,r);    else    cos=mid;    return ;}void find(int a[],int n,int v){    if(n==0)    {        cos=-1;        return;    }    int l=0,r=n-1;    cos=-1;    while(l<=r)    {        int mid=(l+r)/2;       if(a[mid]>v)       r=mid-1;       else if(a[mid]<v)       l=mid+1;       else       {           cos=mid;           break;       }    }    return ;}int main(){    int a[MAX];    int n,v;    printf("输入元素个数:\n");    scanf("%d",&n);    for(int i=0;i<n;i++)    {        scanf("%d",&a[i]);    }    printf("输入查找元素\n");    scanf("%d",&v);    //find(a,v,0,n);    find(a,n,v);    if(cos==-1)    printf("没有元素\n");    else    {        printf("元素下表:%d\n",cos);    }    system("pause");}

 

二分查找*递归*与*非递归