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

Java函数使用:二分搜索算法

发布时间:2023-05-31 11:23:40

二分搜索算法是一种常见的搜索算法,其基本思想是将查找范围逐渐缩小为一半,以快速定位目标值的位置。该算法在很多场合都有广泛的应用,如查找有序数组中的数据、寻找最优解,以及著名的计算机科学问题“猜数字游戏”等。

下面我们来以寻找有序数组中目标值为例,演示如何使用Java实现二分搜索算法。

首先,我们定义一个函数,接收一个有序数组和一个目标值作为输入参数,返回目标值在数组中的索引位置(如果找到)或者-1(如果未找到)。

public static int binarySearch(int[] array, int target) {
    int left = 0;  // 左边界
    int right = array.length - 1;  // 右边界
    
    while (left <= right) {  // 只要左边界小于等于右边界,就继续查找
        int mid = (left + right) / 2;  // 中间位置
        if (array[mid] == target) {  // 找到目标值
            return mid;
        }
        else if (array[mid] < target) {  // 目标值在右半部分
            left = mid + 1;  // 将左边界右移
        }
        else {  // 目标值在左半部分
            right = mid - 1;  // 将右边界左移
        }
    }
    
    // 没有找到目标值
    return -1;
}

在此函数中,我们使用了while循环来查找目标值的位置。首先,我们需要确定有序数组的左右边界。然后,我们不断将查找范围缩小为一半,直到我们找到目标值或查找范围为空。

在每一次循环中,我们计算出查找范围的中间位置,将其与目标值进行比较。如果中间位置的值等于目标值,就返回该位置的索引;如果中间位置的值小于目标值,就将左边界右移;如果中间位置的值大于目标值,就将右边界左移。这样就可以逐渐缩小查找范围,直到找到目标值或查找范围为空。

接下来,我们可以在main函数中调用上述函数,来查找有序数组中目标值的位置。

public static void main(String[] args) {
    int[] array = {1, 3, 5, 7, 9, 11, 13};
    int target1 = 7;
    int target2 = 6;
    
    int index1 = binarySearch(array, target1);
    int index2 = binarySearch(array, target2);
    
    System.out.println("目标值7在数组中的位置是:" + index1);
    System.out.println("目标值6在数组中的位置是:" + index2);
}

该程序的输出结果为:

目标值7在数组中的位置是:3

目标值6在数组中的位置是:-1

从输出结果可以看出,目标值7在有序数组中的位置是3,而目标值6未在该数组中找到。

总之,二分搜索算法是一种高效的查找算法,能快速定位目标值。我们可以在Java中使用该算法来实现各种查找问题,从而提高程序的效率和可靠性。