Java怎么使用二分查找
时间: 2023-07-19 17:17:08 浏览: 51
Java中可以使用Arrays类的binarySearch方法进行二分查找。该方法需要传入一个已排序的数组和要查找的元素值,返回该元素在数组中的索引位置(如果元素存在于数组中),否则返回负数。
以下是一个示例代码:
```java
import java.util.Arrays;
public class BinarySearchExample {
public static void main(String[] args) {
int[] arr = {2, 5, 7, 9, 12, 15};
int key1 = 7;
int key2 = 8;
int index1 = Arrays.binarySearch(arr, key1);
int index2 = Arrays.binarySearch(arr, key2);
System.out.println("key1的索引位置:" + index1);
System.out.println("key2的索引位置:" + index2);
}
}
```
输出:
```
key1的索引位置:2
key2的索引位置:-4
```
注意:如果要查找的元素不在数组中,binarySearch方法返回的是一个负数,该负数表示该元素应该插入的位置再减去1(也就是插入位置的相反数减1)。
相关问题
使用java实现二分查找
好的,下面是一个使用Java实现的二分查找的示例代码:
```java
public class BinarySearch {
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;
}
public static void main(String[] args) {
int[] nums = {1, 3, 5, 7, 9, 11, 13};
int target = 7;
int index = binarySearch(nums, target);
if (index == -1) {
System.out.println("目标元素不存在");
} else {
System.out.println("目标元素在数组中的索引为: " + index);
}
}
}
```
该代码中,`binarySearch`方法接收一个已排序的整数数组和一个目标值,返回目标值在数组中的索引。如果目标值不存在于数组中,则返回-1。
在方法中,我们使用`left`和`right`两个指针表示当前搜索区间的左右边界。然后,我们使用`while`循环不断缩小搜索范围,直到找到目标元素或搜索区间为空。
在每次循环中,我们首先计算中间元素的索引`mid`。如果中间元素等于目标值,则直接返回该元素的索引;否则,如果中间元素小于目标值,则将搜索区间缩小到右半部分;如果中间元素大于目标值,则将搜索区间缩小到左半部分。
最后,如果循环结束时仍然没有找到目标元素,则返回-1表示目标元素不存在于数组中。
在上面的示例代码中,我们使用`main`方法来测试`binarySearch`方法。我们创建一个已排序的整数数组`nums`,并在其中搜索目标值`7`。如果找到了目标值,则输出其在数组中的索引;否则,输出“目标元素不存在”。
Java实现二分查找
Java实现二分查找的基本思路是:
1. 首先,要求待查找的数组必须是有序的。
2. 然后,定义两个指针,一个指向数组的起始位置,一个指向数组的结束位置。
3. 在每一次循环中,计算中间位置的索引,并将中间位置的元素与目标值进行比较。
4. 如果中间位置的元素等于目标值,则返回该位置。
5. 如果中间位置的元素大于目标值,则将结束位置指针移动到中间位置的前一个位置。
6. 如果中间位置的元素小于目标值,则将起始位置指针移动到中间位置的后一个位置。
7. 重复步骤3到步骤6,直到起始位置指针大于结束位置指针,表示未找到目标值。
以下是Java实现二分查找的代码示例:
```java
public class BinarySearch {
public static int binarySearch(int[] arr, int target) {
int start = 0;
int end = arr.length - 1;
while (start <= end) {
int mid = start + (end - start) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] < target) {
start = mid + 1;
} else {
end = 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);
System.out.println("目标值的索引为:" + result);
}
}
```