二分查找-数组实现(小trick)

Posted bella2017

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分查找-数组实现(小trick)相关的知识,希望对你有一定的参考价值。

template<typename T>
int binarySearch(T arr[], int n, T target){
    int l = 0, r = n-1;          //在[l...r]范围内寻找target
while(l <= r){              //当 l == r 时 区间有效
int mid = l+(r-l)/2; if(arr[mid] == target) return mid; if(target > arr[mid]) l = mid + 1;          //target在[mid+1, r]中 else                 //target<arr[mid]
r = mid - 1;          //target在[l...mid]中 }

此处的需要注意的点是:

为什么不用 int mid = (l+r)/2

因为mid,l,r 都是整型,所以如果l,r过大,相加后容易整型溢出,所以使用

int mid = l+(r-l)/2

先相减再加的方法。




以上是关于二分查找-数组实现(小trick)的主要内容,如果未能解决你的问题,请参考以下文章

关于数组的几个小题目-冒泡排序二分查找直接选择排序反转数组

二分查找的代码实现

Java小练习 数组的复制,反转及查找(线性,二分)

找数字(递归,二分查找)

二分查找算法讲解及其C++代码实现

Java 给定一个有序整型数组, 实现二分查找