欢迎访问宙启技术站
智能推送

Java函数实现二进制搜索算法

发布时间:2023-06-24 12:27:12

二分查找也称折半查找(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),所以在查找大型有序数组时非常高效。