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

二分查找

简介

二分查找, 也叫折半查找, 是一种简单的快速查找算法
二分查找针对的是一个有序的数据集合, 查找思想类似分治, 每次都通过跟区间的中间元素对比, 将待查找的区间缩小为之前的一半, 直到找到要查找的元素, 或者区间被缩小为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)

打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2017-2023 王丹鹏
  • Powered by Hexo Theme Ayer
  • 冀ICP备15029707号

请我喝杯咖啡吧~

支付宝
微信