二分查找算法定义 :二分查找(binary search),也称折半搜索,是一种在 有序数组 中 查找某一特定元素 的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半:
下面是动态实现图:
直接上代码:
可以看到递归和非递归都能实现。在网络上也有人随便就写了这样一段代码如下图:
注意:可以看到 mid=(lo+h1)/2 计算中间值的时候 这样计算是有一定的风险的。
建议这样计算:mid = low + (high – low)/2 可以准确计算出中间值
使用二分查找要求:数组+有序 +不重复 。
虽然高效但是我们有些情况数组不是有序,所有构建有序数组变成低效的事情。