二分查找(对分查找)只能用于有序数据:取区间中间位置 mid=(lo+hi)//2,把 a[mid] 与 key 比较:相等就找到;a[mid] 小于 key,目标只可能在右半,令 lo=mid+1;a[mid] 大于 key,令 hi=mid−1。每比较一次区间缩小一半,当 lo>hi 时区间为空,说明表中没有。n 个元素最多比较 ⌊log₂n⌋+1 次:16 个最多 5 次,64 个最多 7 次,而顺序查找最多要 n 次。
mid = (lo + hi) // 2(整除)
a[mid] < key → lo = mid + 1;a[mid] > key → hi = mid − 1
最多比较次数 = ⌊log₂n⌋ + 1
· 前提:数据必须有序;无序数据要先排序或改用顺序查找
· 易错:lo、hi 要移到 mid±1,不是 mid,否则可能死循环
· 易错:64 个元素最多比较 7 次,不是 6 次
· 生活中:翻字典、猜数字游戏(只回答“大了/小了”)