《浙大数据结构》01-复杂度3 二分查找

思路

采用非递归方法实现
共四种情况:

  1. X<Mid,舍弃右半边,缩小查找范围
  2. X>Mid,舍弃左半边,缩小查找范围
  3. X=Mid,返回Mid
  4. X不存在,返回NotFound

“缩小查找范围”理解为“调整左右边界”
利用while循环实现,直到X=Mid或范围内无元素

代码

Position BinarySearch( List L, ElementType X )
{
    Position Left, Right, Mid;
    
    Left = 1;
    Right = L->Last;
    while (Left <= Right)
    {
        Mid = (Left + Right) / 2;
        if (X == L->Data[Mid])
            return Mid;
        else if (X > L->Data[Mid])
            Left = Mid + 1;
        else if (X < L->Data[Mid])
            Right = Mid -1;
    }
    return NotFound;
}

思考题

Right = Mid - 1改为Right = Mid,则当范围内无元素时,此时Left = Right始终成立,程序进入死循环。

注意事项

记得使用L->Data[Mid],别只写个Mid

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值