二分查找法和Fibonacci查找

一、简要介绍二分查找算法    二分查找算法(Binary Search)是一种非常经典且有用的查找算法,它适用于有序数组的元素查找,并且思路简单,能够用非常简洁的代码来将其实现,经典版本的二分查找算法最优情况下的时间复杂度为O(1),最坏情况下的复杂度为O(lgN),平均时间复杂度也仅为O(lgN)。    在时间复杂度上更加优秀的算法不是太多,如hash table通过空间换时间的得到...
摘要由CSDN通过智能技术生成

一、简要介绍二分查找算法

    二分查找算法(Binary Search)是一种非常经典且有用的查找算法,它适用于有序数组的元素查找,并且思路简单,能够用非常简洁的代码来将其实现,经典版本的二分查找算法最优情况下的时间复杂度为O(1),最坏情况下的复杂度为O(lgN),平均时间复杂度也仅为O(lgN)。

    在时间复杂度上更加优秀的算法不是太多,如hash table通过空间换时间的得到O(1)的时间复杂度,以及在二分法思想上进行改进的插值查找算法得到的O(lg(lgN))的时间复杂度(对数据的分布有一定的要求,不够稳定)。

二、二分查找算法的实现

2.1二分法的算法思想

 1)若数组不为空(beg < end),获取位于数组中间的元素(mid),如果中间元素正好是要查找的元素,则搜索过程结束,否则进入下一步;

2)判断关键值是否大于还是小于中间元素,以中间元素为界,若关键值小于vec[mid],则进入前半段[beg,mid),否则进入后半段[mid+1, end)。

3)若数组为空,则数组中不存在等于该关键字的元素,返回-1,意味着不存在这样的下标。

 2.2版本A

版本A时二分法算法思想的直接体现。在实现时,需要注意避免溢出的风险

int mid = (beg + end) >> 1//规避溢出风险并且理论上移位比除法快一些(写/2也没关系,编译器会帮你做出优化的)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值