java实现二分查找
时间: 2023-09-21 19:06:30 浏览: 90
### 回答1:
在Java中,可以使用Arrays.binarySearch()方法来实现二分查找。这个方法需要传入一个已经排序好的数组和要查找的元素,如果找到了该元素,则返回其索引;如果没有找到,则返回负值。
示例代码:
```java
int[] array = {1, 2, 3, 4, 5};
int key = 4;
int index = Arrays.binarySearch(array, key);
if (index >= 0) {
System.out.println("Found at index " + index);
} else {
System.out.println("Not found");
}
```
如果要自己实现二分查找可以这样:
```
int binarySearch(int[] array, int key) {
int low = 0;
int high = array.length - 1;
while (low <= high) {
int mid = low + ((high - low) >> 1);
if (array[mid] == key) {
return mid;
} else if (array[mid] < key) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return -1;
}
```
### 回答2:
二分查找是一种高效的查找算法,适用于已排好序的数组。下面是用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 = {1, 3, 5, 7, 9};
int target = 5;
int result = binarySearch(arr, target);
if (result == -1) {
System.out.println("目标元素不存在");
} else {
System.out.println("目标元素在数组中的索引为:" + result);
}
}
}
```
以上代码实现了一个名为`binarySearch`的静态方法,该方法接受一个已排好序的数组`arr`和目标元素`target`作为参数,并返回目标元素在数组中的索引,如果目标元素不存在,则返回-1。
在`binarySearch`方法内部,通过设定左右指针来进行二分查找。每次迭代中,取左、右指针的中间位置作为中间索引`mid`,比较中间索引对应的元素与目标元素的大小关系。如果相等,直接返回中间索引;如果中间索引对应的元素小于目标元素,说明目标元素在右半部分,更新左指针为`mid + 1`;如果中间索引对应的元素大于目标元素,说明目标元素在左半部分,更新右指针为`mid - 1`。
最后,添加了一个`main`方法作为测试入口,声明一个已排好序的数组`arr`和一个目标元素`target`,并调用`binarySearch`方法进行查找。如果返回结果为-1,则输出目标元素不存在的提示,否则输出目标元素在数组中的索引。
### 回答3:
二分查找也被称为折半查找,是一种高效的查找算法。它通过将查找区间不断二分,缩小查找范围直至找到目标值或确定目标值不存在。
要实现二分查找,首先需要一个有序的数组。假设数组为arr,要查找的目标值为target。
1. 初始化左右边界,分别为left = 0和right = arr.length - 1。
2. 进入循环,当left小于等于right时进行查找。如果left大于right就表示目标值不存在。
3. 计算中间位置的索引mid,通过mid = (left + right) / 2获得。
4. 比较arr[mid]与target的大小:
- 如果arr[mid]等于target,则找到目标值,返回mid。
- 如果arr[mid]大于target,则目标值在左半部分,更新right为mid - 1。
- 如果arr[mid]小于target,则目标值在右半部分,更新left为mid + 1。
5. 如果循环结束还没有找到目标值,说明目标值不存在,返回-1。
下面用代码实现:
```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) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] > target) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return -1;
}
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int target = 7;
int result = binarySearch(arr, target);
if (result == -1) {
System.out.println("目标值不存在");
} else {
System.out.println("目标值的索引为: " + result);
}
}
}
```
以上就是Java实现二分查找的方法,利用二分查找可以在有序数组中快速找到目标值,具有较高的查找效率。
阅读全文