写个Java二分查找
时间: 2023-09-07 16:04:50 浏览: 57
### 回答1:
下面是一个简单的 Java 二分查找代码:
```
public static 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;
}
```
该代码实现了二分查找算法,适用于已排序的数组。如果找到目标元素,则返回其索引;如果未找到,则返回 -1。
### 回答2:
二分查找,又称折半查找,是一种非常高效的查找算法。它适用于有序数组,并通过将待查找值与数组中间元素进行比较来逐步缩小查找范围,最终找到目标值或确定目标值不存在。
下面是一个用Java语言编写的二分查找算法示例:
```java
public class BinarySearch {
public static int binarySearch(int[] arr, int target) {
int low = 0;
int high = arr.length - 1;
while (low <= high) {
int mid = low + (high - low) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] < target) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return -1;
}
public static void main(String[] args) {
int[] arr = {1, 3, 5, 7, 9, 11, 13, 15};
int target = 7;
int result = binarySearch(arr, target);
if (result == -1) {
System.out.println("目标值不存在");
} else {
System.out.println("目标值的索引为:" + result);
}
}
}
```
上述代码中,二分查找的算法实现在`binarySearch`方法中。传入两个参数,`arr`代表要查找的有序数组,`target`代表要查找的目标值。使用`low`和`high`变量来追踪当前查找范围的起始和结束位置。在一个循环中,不断更新`mid`变量并比较`arr[mid]`与`target`的值,根据比较结果更新`low`和`high`的值来缩小查找范围。如果找到目标值,返回其索引,否则返回-1表示目标值不存在。
在`main`方法中,给定一个有序数组`arr`和目标值`target`,调用`binarySearch`方法进行二分查找,并根据返回结果输出查找结果。
这个算法的时间复杂度为O(log n),其中n是数组的长度。相比于线性查找算法,二分查找具有更高的效率。
### 回答3:
二分查找(Binary Search)是一种基于有序数组的查找算法。它通过将数组不断分割,将目标值与中间元素进行比较,缩小查找范围,直到找到目标元素或确定目标元素不存在。以下是一个用Java实现的二分查找示例:
```java
public class BinarySearch {
public static int binarySearch(int[] arr, int target) {
int left = 0;
int right = arr.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target) {
return mid;
}
if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1; // 目标元素不存在
}
public static void main(String[] args) {
int[] arr = {2, 4, 6, 8, 10};
int target = 6;
int result = binarySearch(arr, target);
if (result == -1) {
System.out.println("目标元素不存在");
} else {
System.out.println("目标元素在索引 " + result + " 处");
}
}
}
```
在上面的示例中,`binarySearch` 方法使用迭代的方式来实现二分查找。它接受一个有序数组 `arr` 和目标值 `target` 作为参数。初始时,定义两个指针 `left` 和 `right` 分别指向数组的首尾元素。然后使用一个循环,当 `left` 不大于 `right` 时,就进行迭代查找。
在每次循环中,计算中间元素的索引 `mid`,使用该索引获取中间元素的值。然后与目标值进行比较,如果相等则返回当前索引 `mid`。如果目标值小于中间元素的值,则将 `right` 更新为 `mid - 1`,将查找范围缩小到左半部分。如果目标值大于中间元素的值,则将 `left` 更新为 `mid + 1`,将查找范围缩小到右半部分。
如果循环结束后仍未找到目标元素,则返回 -1,表示目标元素不存在。
在 `main` 方法中,我们定义了一个有序数组 `arr` 和目标值 `target`,然后调用 `binarySearch` 方法进行查找,并根据返回结果输出相应的信息。
以上就是一个用Java实现的二分查找算法。