C++ 数据结构(二)向量(5)二分查找

本文介绍了C++中向量的二分查找算法,包括其原理、不同版本的实现和性能评估。从版本A的简单二分查找,到版本B的改进,再到最终版本C,通过递归和中点选取策略优化查找效率,确保在有序向量中查找元素的高效性。同时,文章强调了正确实现接口和满足语义约定的重要性。
摘要由CSDN通过智能技术生成

来源:我的博客站 OceanicKang |《C++ 数据结构(二)向量(5)二分查找》

上一篇:《C++ 数据结构(二)向量(4)有序向量》

【注】二分查找的前提是有序向量,亦或有序线性表

接口

template <typename T> // 查找算法同一接口,0 <= lo < hi <= _size
Rank Vector<T>::search(T const &e, Rank lo, Rank hi) const {
   
    return (rand() % 2) ?            // 按各 50% 的概率随机选用
        binSearch(_elem, e, lo, hi): // 二分查找算法,或者
        fibSearch(_elem, e, lo, hi); // Fibonacci 查找算法
}

语义

1.png

应该便于有序向量自身的维护:V.insert(1 + V.search(e), e)

即便失败,也应给出新元素适当的插入位置

若允许重复元素,则每一组也需按其插入的次序排列

【约定】

  • 在有序向量区间 A[lo, hi) 中,确定 不大于 e 的最后一个 元素
  • -∞ < e < V[lo],则返回 lo
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值