数据结构定义和算法--二分查找01

定义

二分查找是对一个有序数据集合,每次通过对中间数据进行比较使查找区间减半,直到找到目标元素或者查找区间变为零。

时间复杂度

  1. 时间复杂度为O(logn);
  2. 有时候O(logn)比O(1)还要快,因为有常数项;

如何实现

  1. 循环实现:注意循环退出的条件是start <= end,而不是start < end;mid = start + (end - start) / 2,而不是用 (start + end) / 2;
  2. 递归实现:start和end更新,start = mid + 1以及end = mid - 1;mid = start + (end - start) / 2可以写成mid = start + ((end - start) >> 2);

数据结构定义和算法--二分查找01

使用条件

  1. 二分查找依赖的是顺序表结构,即数组;
  2. 二分查找针对的是有序数据,因此只能用在删除和插入操作不频繁,一次排序多次查找的场景中;
  3. 数据量太小就不适合二分查找,与直接遍历相比效率提升不明显;但有一个例外就是比较操作比较贵的时候,还是用比较操作少的二分查找比较好;
  4. 数据量太大也不适合用二分查找,因为二分查找依赖数组(这个需要连续空间),大规模的数据往往无法找到对应的连续内存;