二分查找

简介:

     二分查找

     二分查找(二分搜索)又称折半查找,它要求线性表是有序的,并且需要用一维数组进行存储。二分查找的基本思想如下:

     假设L[low......high]为当前要查找的区间(假设是递增有序)。

     (1)首先确定该区间的中间位置,mid=(low+high)/2;

     (2)将待查找的key值与L[mid].key进行比较,如果相等,则查找结束;若不等,则在新的区间进行相同的操作,新的区间确定过程如下:

         1)若key>L[mid].key,则key值只可能在mid的右边区间,则新的查找区间为L[mid+1,high];

         2)若key<L[mid].key,则key值只可能在mid的左边区间,则新的查找区间为L[low,mid-1];

复制代码
int BinarySearch(SeqList R,int low,int high,ElemType key)
{
    int mid;
    while(low<=high)
    {
        mid=low+(high-low)>>1;   //可以有效地避免溢出的情况
        if(key==R[mid].key)
            return mid;
        if(key<R[mid].key)
            high=mid-1;
        else
            low=mid+1;
    }
    return -1;
}
复制代码

递归实现:

复制代码
int BinarySearch(SeqList R,int low,int high,ElemType key)
{
    if(low>high)
        return -1;
    int mid=low+(high-low)>>1;
    if(key==R[mid].key)
        return mid;
    else
    {
        if(key<R[mid].key)
            BinarySearch(R,low,mid-1,key);
        else
            BinarySearch(R,mid+1,high,key);
    }
}
复制代码
相关文章
|
SQL 关系型数据库 MySQL
宝塔账号密码忘记了怎么办
宝塔账号密码忘记了怎么办
|
API Apache
性能工具之JMeter5.0核心类JMeterEngine源码分析
【5月更文挑战第17天】性能工具之JMeter5.0核心类JMeterEngine源码分析
312 4
性能工具之JMeter5.0核心类JMeterEngine源码分析
|
存储 索引
今天推荐的是5款同类软件中的佼佼者
你电脑中用的最久的软件是哪些?以下是否有你曾经使用过的软件呢?工欲善其事,必先利其器,今天继续分享5款同类软件中的佼佼者。
271 0
|
JSON Java 测试技术
《Java单元测试实战》——简化技巧:Java编程技巧之单元测试用例简化方法(2)
《Java单元测试实战》——简化技巧:Java编程技巧之单元测试用例简化方法(2)
185 0
|
消息中间件 缓存 Cloud Native
《云计算加速开源创新》——云原生背景下消息领域的一次重新定义(上)
《云计算加速开源创新》——云原生背景下消息领域的一次重新定义(上)
贤鱼的刷题日常--P1019 [NOIP2000 提高组] 单词接龙--题目详解
🍀学习了解P1019 [NOIP2000 提高组]单词接龙--题目详解
235 0
贤鱼的刷题日常--P1019 [NOIP2000 提高组] 单词接龙--题目详解
|
前端开发
前端工作总结174-富文本编辑器使用篇wangedit
前端工作总结174-富文本编辑器使用篇wangedit
498 0
前端工作总结174-富文本编辑器使用篇wangedit
|
XML vlayout Java
vlayout学习笔记
关于阿里android的UI框架 vlayout的学习笔记
vlayout学习笔记
|
安全 Java Go
Go基础:函数、闭包、递归
Go基础:函数、闭包、递归
Go基础:函数、闭包、递归
|
存储 弹性计算 人工智能
10年后,阿里给千万开源人写了一封信 | 1月15号云栖号夜读
今天的首篇文章,讲述了:年末将至,阿里巴巴开源技术委员会负责人贾扬清写了一封信,想要和热爱开源的你说一声:谢谢。未来,我们希望与更多开源人一起,用技术普惠世界。
3014 0