• Index

二分查找

Last updated: ... / Reads: 119 Edit

二分查找

二分查找(Binary Search)是一种常见的查找算法,用于在已排序的数组或列表中查找特定元素的位置。该算法的时间复杂度为 O(log n)。

以下是Java语言实现二分查找的示例代码:

public static int binarySearch(int[] arr, int target) {
    int left = 0, 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;
}

在这个示例中,binarySearch方法接收一个已排序的整数数组arr和一个目标整数target作为参数。它使用两个变量left和right来表示当前要查找的范围,即在left和right之间查找目标元素。开始时,left被初始化为数组的第一个索引,right被初始化为数组的最后一个索引。

在每次循环中,算法首先计算出当前范围的中间索引mid。如果arr[mid]等于目标元素target,则算法返回mid,表示目标元素已经找到。如果arr[mid]小于目标元素target,则说明目标元素在mid的右侧,因此将left更新为mid + 1,在右侧继续查找。如果arr[mid]大于目标元素target,则说明目标元素在mid的左侧,因此将right更新为mid - 1,在左侧继续查找。

如果最终未找到目标元素,则返回-1表示查找失败。

代码注释

以下是带有注释的Java代码实现二分查找:

public static int binarySearch(int[] arr, int target) {
    int left = 0, right = arr.length - 1; // 初始化要查找的范围,左侧为0,右侧为数组长度减一
    while (left <= right) { // 只要范围没有缩小到0,就继续查找
        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; // 如果查找失败,返回-1
}

在代码中,每个关键步骤都有注释说明,包括初始化要查找的范围,计算当前范围的中间位置,比较中间位置的值与目标值的关系,以及更新要查找的范围的边界。此外,代码还包括了查找失败时的返回值-1的注释说明。这些注释可以使代码更易于理解和维护。


Comments

Make a comment

  • Index