参考链接: https://programmercarl.com/%E6%95%B0%E7%BB%84%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html
数组可以这样的简单理解:存储在内存空间里,连续的,相同数据类型的数据集合
- 数组在内存里是一个连续的空间
- 通过下标可以快速的检索到其对应的数据,在python 中,list 虽然不是数组,但是也可以这样理解
- 一般下标从 0 开始
有序(升序或者降序),元素不相同,有限,查找指定的值
二分法的方法就是,把数组分成两份 ,如果查找的值在左边那份,那么就把 left 和 right 重新定义到左边,然后重新查找,直到找到我们需要匹配的值,反之亦然
那么这个算法的难点就在于我们如何定义边界,边界值如果不处理好很容易陷入死循环
那么如何确定好边界值呢,就是判断 while 在什么时候有意义
我们先初始化指针 i=0 和 j=n−1 ,分别指向数组首元素和尾元素,代表搜索区间 [0,n−1] 。请注意,中括号表示闭区间,其包含边界值本身。
接下来,循环执行以下两步。
- 计算中点索引 m=⌊(i+j)/2⌋ ,其中 ⌊⌋ 表示向下取整操作。
- 判断
nums[m]和target的大小关系,分为以下三种情况。- 当
nums[m] < target时,说明target在区间 [m+1,j] 中,因此执行 i=m+1 。 - 当
nums[m] > target时,说明target在区间 [i,m−1] 中,因此执行 j=m−1 。 - 当
nums[m] = target时,说明找到target,因此返回索引 m 。
- 当
若数组不包含目标元素,搜索区间最终会缩小为空。此时返回 −1 。