Java函数实现二进制搜索算法
二分查找也称折半查找(Binary Search),它是一种基于比较目标值与查找值相等或大小的查找算法。
它的工作方式是对于已经排好序的数组,每次都取中间的值与查找值做比较,如果相等则返回查找值的下标,如果查找值比中间值小,则在该中间值的左侧数组中继续查找,如果查找值比中间值大,则在该中间值的右侧数组中继续查找,直到找到目标值或者遍历完整个数组。
下面是 Java 函数实现二分查找算法的示例代码:
public int binarySearch(int[] arr, int target) {
int left = 0;
int right = arr.length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
在这个代码中,我们先设定左右两个指针分别指向数组的最左和最右两个位置,接着在 while 循环中不断移动左右两个指针进行查找。
为了减小中间值的偏差,我们在每次迭代中使用 (left + right) / 2 计算出中间值 mid。如果中间值等于目标值,则返回 mid 的值。如果中间值小于目标值,则在中间值的右侧继续查找;如果中间值大于目标值,则在中间值的左侧继续查找。
如果整个数组都遍历完后仍未找到目标值,函数就会返回 -1 表示查找失败。
在使用 binarySearch 函数时,要注意数组必须是排好序的,否则函数不会得出正确的结果。此外,如果数组中有重复元素,函数只能返回其中一个元素的下标。
因为二分查找是一种高效的查找算法,其时间复杂度为 O(log n),而不是线性的 O(n),所以在查找大型有序数组时非常高效。
