前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >二分查找的递归和非递归

二分查找的递归和非递归

作者头像
lexingsen
发布2022-02-24 15:59:28
5790
发布2022-02-24 15:59:28
举报
文章被收录于专栏:乐行僧的博客乐行僧的博客

二分查找的前提是数据有序,二分查找的性能十分优秀。时间复杂度为O(log2n) 非递归

代码语言:javascript
复制
int binsearch(int arr[],int len,int value){
    //low和high指向当前查找区间的两端,value为查找的关键字
    int low=0;
    int high=len-1;
    int mid;//当前区间的中间
    while(low <= high){
        mid = low + (high-low)/2;
        //mid = (low+high)/2;这样的写法会有整型相加溢出的bug
        if(arr[mid] == value){
            return mid;//返回下标
        }
        if(value < arr[mid]){
            high = mid-1;
        }
        else{
            low = mid+1;
        }
    }
    return -1;//未查找到返回-1
}

递归

代码语言:javascript
复制
int binsearch(int arr[],int left,int right,int value){
    //递归出口
    if(left > right){
        return -1;
    }
    mid = low + (high-low)/2;
    if(arr[mid] == value){
        return mid;
    }
    else if(arr[mid] > value){
        return binsearch(arr,left,mid-1,value);
    }
    else{
        return binsearch(arr,mid+1,right,value);
    }
}

顺序查找的时间复杂度为O(n),相对于二分查找性能较差

代码语言:javascript
复制
int seqsearch(int arr[],int len,int value){
    for(int i=0;i < len;++i){
        if(arr[i] == value){
            return i;
        }
    }
    return -1;//未查找到返回-1
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档