请用Java代码编写二分查找
时间: 2023-03-14 08:08:40 浏览: 108
好的,以下是Java代码实现二分查找的示例:
```java
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; // 表示目标元素不存在
}
```
这里使用了一个 while 循环来实现二分查找,其中使用了左右指针来缩小搜索范围。在每次循环中,首先计算中间元素的下标(通过 left 和 right 求平均数),然后将其与目标元素进行比较。如果中间元素等于目标元素,则直接返回其下标;否则,如果中间元素小于目标元素,则将左指针移到中间元素的右边,否则将右指针移到中间元素的左边。重复上述步骤,直到找到目标元素或者确定目标元素不存在。
相关问题
用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 - left) / 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[] array = {1, 5, 8, 11, 19, 22, 31, 35, 40, 45, 48, 49, 50};
int target = 47;
int idx = binarySearch(array, target);
System.out.println(idx); // 输出:-1
}
}
```
这段代码实现了二分查找算法。它接受一个有序数组和目标值作为输入,并返回目标值在数组中的索引。如果目标值不存在于数组中,则返回-1。
在二分查找算法中,我们首先将数组的左边界和右边界初始化为数组的第一个和最后一个元素的索引。然后,我们计算中间元素的索引,并将其与目标值进行比较。如果中间元素等于目标值,则返回中间元素的索引。如果中间元素小于目标值,则将左边界更新为中间元素的索引加1。如果中间元素大于目标值,则将右边界更新为中间元素的索引减1。通过不断缩小搜索范围,最终可以找到目标值或确定目标值不存在于数组中。
在上面的示例代码中,我们使用了一个while循环来执行二分查找算法。循环条件是左边界小于等于右边界。在每次循环中,我们计算中间元素的索引,并根据中间元素与目标值的比较结果更新左边界或右边界。如果循环结束时仍然没有找到目标值,则返回-1。
java编写二分查找代码
面是Java编写的二分查找代码:
```java
public class BinarySearch {
//方法1:递归求解
public int recursionSearch(int[] A, int start, int end, int number) {
if (start > end) {
return -1;
}
int mid = (start + end) / 2;
if (A[mid] == number) {
return mid;
} else if (A[mid] > number) {
return recursionSearch(A, start, mid - 1, number);
} else {
return recursionSearch(A, mid + 1, end, number);
}
}
//方法2:迭代求解
public int iterationSearch(int[] A, int number) {
int start = 0;
int end = A.length - 1;
while (start <= end) {
int mid = (start + end) / 2;
if (A[mid] == number) {
return mid;
}
if (A[mid] > number) {
end = mid - 1;
}
if (A[mid] < number) {
start = mid + 1;
}
}
return -1;
}
public static void main(String[] args) {
BinarySearch test = new BinarySearch();
int[] A = {3, 14, 27, 31, 39, 42, 55, 70, 74, 81, 85, 93, 98};
System.out.println("使用递归法求解number = 70的数组下标结果:" + test.recursionSearch(A, 0, A.length - 1, 70));
System.out.println("使用迭代法求解number = 70的数组下标结果:" + test.iterationSearch(A, 70));
}
}
```
阅读全文