一、什么是二分查找?
打开百度查找一下,它会给你以下一段话:
二分查找也称折半查找(BinarySearch),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
从这段话,我们可以得到一个非常有价值的消息:
二分查找只适用于有序排列序列
什么意思呢?就是说你这个算法只能用于从大到小、或者从小到大排列好的有序序列。如果你存放数据的数组是无序的,那你首先还得给它排序一下。
二、二分查找算法的具体思路
首先如果我们有一个数组:
{1,8,10,89,1000,1214}
-
首先我们需要确认这个数组中间元素的数值。
应该是 mid =(最左边的元素下标+最右边元素的下标)/ 2
-
这时候我们进行一个比较,如果 findVal > arr[mid] 那么就说明,你需要的元素在中间元素的右边,这时候你只需要向右遍历就可以了。
-
如果 findVal < arr[mid] 那么就说明,你需要的元素在中间元素的左边,这时候你只需要向左遍历就可以了。
-
如果findVal = arr[mid] 那么就说明,你找到这个元素了。
那么这时候可能就有人问,什么时候我们退出递归呢?
- 找到你需要的元素就结束递归。
- 递归完整个数组,还没有查找到目标元素,就要结束递归,当left > right 就需要进行退出。
整个思路流程相比其他算法,还是比较简单的,那么接下来我们就用代码进行演示一下吧。
三、二分查找算法的代码演示
二分查找的代码实现如上图所示~
逻辑相对来说,也不是很难~
大家一起加油呀~