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]

你可能感兴趣的:(11.二分查找(Binary Search))