现有一个已排序的数组,请使用递归二分法查找出元素第一次出现的位置,用Java
时间: 2024-02-05 08:11:26 浏览: 32
好的,以下是使用递归二分法查找元素第一次出现位置的Java代码:
```
public static int binarySearch(int[] arr, int target) {
return search(arr, target, 0, arr.length - 1);
}
private static int search(int[] arr, int target, int left, int right) {
if (left > right) {
return -1; // 没有找到目标元素
}
int mid = left + (right - left) / 2;
if (arr[mid] == target) {
if (mid == 0 || arr[mid - 1] != target) {
return mid; // 找到目标元素第一次出现的位置
} else {
return search(arr, target, left, mid - 1); // 在左半边继续查找
}
} else if (arr[mid] < target) {
return search(arr, target, mid + 1, right); // 在右半边继续查找
} else {
return search(arr, target, left, mid - 1); // 在左半边继续查找
}
}
```
其中,`binarySearch`方法是公开的二分查找方法,它调用了私有的`search`方法来实现递归二分查找。`search`方法接收四个参数,分别是要查找的数组、目标元素、查找区间的左端点和右端点。如果找到了目标元素,就判断它是否是第一次出现,如果是,则返回位置;如果不是,则在左半边继续查找;如果目标元素比中间元素小,则在左半边查找;如果目标元素比中间元素大,则在右半边查找。如果最终没有找到目标元素,就返回-1。