摘要:使用位运算和减少计算次数的技巧优化二分查找算法。
在《算法——二分法查找》的二分法实现源码binarySearch_2实现中,可以发现计算了两次mid
,那有没有办法计算一次呢?另一方面,位运算min + (max - min) >> 1
还有其它等价实现方法吗?我带着这两个质疑写出了如下的实现方法,使代码更易读。
/**
* 根据元素大小进行二分法查找一返回下标
*
* @param arr 数组
* @param key 待匹配的值,看数组中是否存在
* @return key 在数组中的下标,如果是-1,就说明数组中不存在此元素
*/
public static int binarySearch_3(int[] arr, int key) {
// 最小值的下标
int min = 0;
// 最大下标,等于数组长度
int max = arr.length - 1;
while (min <= max) {
int mid = (max + min) >> 1;
if (arr[mid] > key) {
max = mid - 1;
} else if (arr[mid] < key) {
min = mid + 1;
} else {
return mid;
}
}
return -1;
}
瞧一瞧代码是否变得更简练了?老铁,你有更有效的实现策略吗?评论区等着你呢!
标签:arr,min,int,mid,二分法,算法,查找,key From: https://www.cnblogs.com/east7/p/17011134.html