1. 基础知识

算法简介

二分查找是在有序数组中寻找某一元素的查找算法,它的主要思想就是将搜索空间缩小为原来的一半。尽管二分查找的思想非常简单,但是很多人也容易出错,主要问题出现在代码对边界值的处理、比较符号带不带等号这些细节上。

算法流程

  • 设数组 arr = [0, 1, …, N],初始化左边界 left=0,右边界 right=len(arr)-1mid 为左右指针的中点;
  • 取出 mid 指向的元素,如果此元素为查找的元素,结束查找过程,并返回结果;
  • 如果 mid 指向的元素大于查找目标,因为数组有序,因此接下来查找 arr[left, mid-1];如果此元素小于查找目标,那么接下来查找 arr[mid+1, right]
  • 更新 leftrightmid,不断重复此过程,如果搜索空间为空,说明数组 arr 中不存在所要寻找的值。

复杂度分析

  • 平均时间复杂度 $O(\log N)$
  • 最坏时间复杂度 $O(\log N)$
  • 空间复杂度
    • 迭代实现: $O(1)$
    • 递归实现: $O(\log N)$
阅读全文 »