码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-12-18 11:50:36      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:blog   ar   io   os   sp   for   div   问题   log   

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

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

#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
#define MAX 1000
int 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");
}

 

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

标签:blog   ar   io   os   sp   for   div   问题   log   

原文地址:http://www.cnblogs.com/yang95/p/4171268.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!