数据结构学习笔记 - 二分查找

二分查找

简介

二分查找, 也叫折半查找, 是一种简单的快速查找算法
二分查找针对的是一个有序的数据集合, 查找思想类似分治, 每次都通过跟区间的中间元素对比, 将待查找的区间缩小为之前的一半, 直到找到要查找的元素, 或者区间被缩小为0
时间复杂度O(logn), 对数时间复杂度

代码实现

二分查找的递归与非递归实现
最简单的情况是有序数组中不存在重复元素
循环实现 (todo)
递归实现 (todo)
容易出错的三个地方

  1. 循环退出条件, low<=high
  2. min的取值, low和high比较大的话, 相加可能会溢出
  3. low和high的更新, low=mid或high=mid可能会死循环

局限性

  1. 依赖顺序表结构, 既数组, 因为依赖按下标随机访问元素
  2. 针对有序数据, 如果无序需要先排序, 如果插入删除操作频繁, 则需频繁排序, 所以不适用二分查找
  3. 数据量适中, 数据量太小直接用遍历更为方便, 数据量太大时, 因为需要存储在数组, 需要连续内存空间, 内存可能放不下

进阶版

  • 查找第一个值等于给定值的元素 (todo)
  • 查找最后一个值等于给定值的元素 (todo)
  • 查找第一个大于等于个定制的元素 (todo)
  • 查找最后一个小于等于给定值的元素 (todo)

总结

等值查找使用散列表或者二叉查找树更多, 二分查找更适合用在近似查找问题

课后练习

求一个数的平方根, 精确到小数点后6位 (todo)
一个循环有序数组[4,5,6,1,2,3]中查找某个值 (todo)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值