栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数组的二分查找的优化及对称边界的另一种写法

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数组的二分查找的优化及对称边界的另一种写法

数组二分查找的优化代码:(优化的地方在于最大限度地减少寻址运算,用指针代替下标运算,另外就是除法运算用移位运算代替)

int *bsearch(int *t, int n, int x){//不对称边界
    int *lo = t, *hi = t + n;
    while(lo < hi){
        int *mid = lo + ( (hi - lo) >> 1 );
        if(x < *mid)
            hi = mid;
        else if(x > *mid)
            lo = mid + 1;
        else
            return mid;
    }
}

采用对称边界来表达二分查找(看上去整齐许多):

int *bsearch(int *t, int n, int x){//对称边界
    int lo = 0, hi = n - 1;
    while(lo <= hi){
        int mid = (hi + lo)/2;
        if(x < t[mid])
            hi = mid - 1;
        else if(x > t[mid])
            lo = mid + 1;
        else
            return t + mid;
    }
    return NULL;
}

但是采用对称边界的写法如果想要改写成“纯指针”的形式,就会遇到麻烦。问题在于,我们不能把hi初始化为t + n - 1。因为当n为0时,这是一个无效地址。因此,如果我们还想把程序改写成指针的形式,就必须对n = 0的情形进行单独的测试。这从另一个角度又一次说明了为什么应该采用不对称边界。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/739068.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号