二分查找
二分查找(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的注释说明。这些注释可以使代码更易于理解和维护。