JAVA二分法对一个有序数列查找
时间: 2023-05-29 14:04:12 浏览: 151
JS实现二分查找查找有序数组中的数字
二分法是一种常用的查找有序数列的算法,其基本思想是:将有序数列分为两部分,判断目标值在哪一部分中,然后继续在该部分中进行查找,直到找到目标值或者确定目标值不存在。
以下是JAVA二分法对一个有序数列查找的示例代码:
```
public class BinarySearch {
public static int search(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;
} else 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 index = search(arr, target);
if (index != -1) {
System.out.println("目标值 " + target + " 在数组中的索引为 " + index);
} else {
System.out.println("目标值 " + target + " 不存在于数组中");
}
}
}
```
在上述代码中,首先定义了一个 `search` 方法,该方法接收一个有序数组和目标值,返回目标值在数组中的索引。在方法中,定义了两个指针 `left` 和 `right`,分别指向数组的第一个和最后一个元素。然后进入循环,每次将指针范围缩小一半,直到找到目标值或者确定目标值不存在。
在循环中,首先计算出中间位置 `mid`,然后判断中间位置的值与目标值的大小关系:如果中间位置的值等于目标值,则直接返回中间位置。如果中间位置的值小于目标值,则说明目标值在右半部分,将左指针移到中间位置的右侧。如果中间位置的值大于目标值,则说明目标值在左半部分,将右指针移到中间位置的左侧。循环直到左指针大于右指针,此时说明目标值不存在于数组中,返回 -1。
在 `main` 方法中,定义了一个有序数组 `arr` 和目标值 `target`,然后调用 `search` 方法查找目标值在数组中的位置,并输出结果。在该示例中,目标值为 5,查找到目标值存在于数组的第二个位置,输出结果为:
```
目标值 5 在数组中的索引为 2
```
阅读全文