Java中实现二分查找算法的函数代码是什么?
二分查找是一种常用的查找算法,也叫折半查找算法。它是一种对于有序数据的二分查找,将查找范围不断缩小为原来的一半,直到找到目标元素或者确定该元素不存在。下面是Java中实现二分查找算法的函数代码。
public static int binarySearch(int[] arr, int key) {
int low = 0, high = arr.length - 1;
while (low <= high) {
int mid = (low + high) >>> 1;
int midVal = arr[mid];
if (midVal < key) {
low = mid + 1;
} else if (midVal > key) {
high = mid - 1;
} else {
return mid;
}
}
return -1;
}
这里我们定义了一个名为binarySearch的函数,该函数接收两个参数,arr为待查找数组,key为查找目标值。然后将待查找数组的左右指针赋值为0和数组长度减1。
接着进入while循环,只要左指针小于等于右指针,就会执行循环中的代码。其中符号“>>>”是Java中的位运算符,用于逻辑位移,效果与“() >> 1”相同,但可以避免使用负数时出现歧义。
在循环中,首先需要计算中间位置下标,这里使用“>>>”运算,将整数除以2后向下取整,再将结果赋值给变量mid。之后,从数组中获取mid位置处的元素,与目标值进行比较。
如果中间位置的值小于目标值,说明需要在中间位置右侧查找,将左指针移到mid+1处;如果中间位置的值大于目标值,说明需要在中间位置左侧查找,将右指针移到mid-1处。如果中间位置的值与目标值相等,说明找到了目标值,返回mid。
如果while循环结束时还未找到目标值,说明待查找数组中不存在该值,返回-1表示查找失败。
总的来说,二分查找算法是一种高效的查找算法,在有序数组中的查找效率非常高。对于大规模的数据集合,它的算法复杂度不超过O(log n),可以帮助我们快速地查找目标值。
