二分查找

来源:互联网 发布:工业设计网站 知乎 编辑:程序博客网 时间:2024/06/11 23:41
//数组事先有序
#include<stdio.h>


int bsearch(int *num, int x, int y, int choose); //x是下界 y是上界 choose是要查找的值
int asearch(int *num, int x, int y, int choose);


int main ()
{
    int num[10]={1,2,3,4,5,6,7,8,9,10};
    int choose=3;


    printf("用迭代的方法求位置是:%d", bsearch(num, 0, 9, choose));
    printf("\n用递归的方法求位置是:%d", asearch(num, 0, 9, choose));


}


int bsearch(int *num, int x, int y, int choose)
{
    int m;
    while(x<y)
    {
        m=x+(y-x)/2;
        if(num[m]==choose)
            return m+1;
        else if(num[m]>choose)
            y=m-1;      //答案的上界是y
        else
            x=m+1;   //答案的下界是m+1  m肯定小于所找的数值
    }
    return -1;
}
int asearch(int *num, int x, int y, int choose)
{
    int m;
    if(x<y) //x<=y结果相同  y-x=1时 m=x+1/2=m+0
    {
        m=x+(y-x)/2;
        if(num[m]==choose)
            return m+1;
        else if(num[m]>choose)
            return asearch(num, x, m-1, choose);
        else
            return asearch(num, m+1, y, choose);
    }
    else
        return -1;


}
原创粉丝点击