11.二分查找(Binary Search)

针对有序的数据集合。每次都通过与区间的中间元素对比,将待查找区间缩小为原来一半,直到找到所需元素或区间缩小为0

时间复杂度O(logn)

易错点(low、high、mid指数组下标)

  • 循环退出条件(low<=high)
  • mid取值
    mid=low+(high-low)/2
    位运算优化 div 2 == shr 1
  • 区间上下界更新(low=mid+1、high=mid-1)

应用场景局限性?

  • 依赖顺序表结构(即数组-用于按照下标随机访问元素)
  • 查找针对的是有序数据(&插入删除操作不频繁、一次排序多次查找)
  • 数据量太小时与顺序遍历无异(除非数据间操作耗时)
  • 数据量太大是用数组存储困难

存在重复元素

变形一:查找第一个值等于给定值的元素

if ((mid==0) || (a[mid-1]!=value)) return mid;(当a[mid]=value时检查)

变形二:查找第一个大于等于给定值的元素

if ((mid==0) || (a[mid-1]<value)) return mid;

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容