关于二分查找的具体实现和原理解释,在之前的一篇文章里有专门提到,详解请见二分查找
这篇文章,我们主要是利用二分查找的基本原理来解决一些问题~
一、在一个有序数组里查找元素val,若找到了返回元素下标,没有找到,返回该元素在数组中应该插入的位置
如下图:
分析:
首先,我们要返回两个值,一个是元素下标,一个是找没找到val值的布尔值,所以我们要定义一个结构体,来表示这两个值,如下:
typedef struct
{
int index;
bool tag;//找到了为ture,flase
}Result;
其次,我们再来探讨是返回left、right还是mid下标所指的值,以val =40为例子,查找过程如下:
由上图可知,当查找到第4趟的时候left==right,但是45>40,所以right = mid-1;才退