定义
二分查找是对一个有序数据集合,每次通过对中间数据进行比较使查找区间减半,直到找到目标元素或者查找区间变为零。
时间复杂度
- 时间复杂度为O(logn);
- 有时候O(logn)比O(1)还要快,因为有常数项;
如何实现
- 循环实现:注意循环退出的条件是start <= end,而不是start < end;mid = start + (end - start) / 2,而不是用 (start + end) / 2;
- 递归实现:start和end更新,start = mid + 1以及end = mid - 1;mid = start + (end - start) / 2可以写成mid = start + ((end - start) >> 2);
使用条件
- 二分查找依赖的是顺序表结构,即数组;
- 二分查找针对的是有序数据,因此只能用在删除和插入操作不频繁,一次排序多次查找的场景中;
- 数据量太小就不适合二分查找,与直接遍历相比效率提升不明显;但有一个例外就是比较操作比较贵的时候,还是用比较操作少的二分查找比较好;
- 数据量太大也不适合用二分查找,因为二分查找依赖数组(这个需要连续空间),大规模的数据往往无法找到对应的连续内存;
《数据结构与算法之美》 -- 王争