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中使用该算法来实现各种查找问题,从而提高程序的效率和可靠性。
