二分查找
二分查找是针对有序结合,将区间分为两个,每次和区间的中位元素比较,以此循环直到找到元素或者区间的大小为 0。
实现
- 循环退出条件:
low <= high
- mid 取值:
mid = low + (high - low) >> 1
- low 和 high 的更新:
low = mid + 1; high = mid - 1
二分查找局限性
- 依赖顺序表结构,即数组。需要元素的随机访问
- 二分查找针对有序数组,原序列无序时需要先排序
- 数据量太大不适合二分查找,二分查找需要顺序表结构,需要连续的地址空间,对内存要求较高。
- 二分查找是和静态的数据序列,不适合动态变化的。
时间复杂度
二分查找采用不断的二分区间的做法,数据量为 n,经过 k 次二分查找有 $2^k = n$
,则$k = log_2n$
,时间复杂度是$O(logn)$