Java代码实现前一题
时间: 2024-09-18 15:05:36 浏览: 14
在Java中,我们可以使用递归或迭代的方式来实现二分搜索算法。以下是前一题的Java代码实现:
```java
public class BinarySearch {
public static void main(String[] args) {
int[] array = {1, 8, 12, 15, 16, 21, 30, 35, 39};
int result1 = binarySearch(array, 30);
System.out.println("元素30在数组中的位置: " + (result1 == -1 ? "无此元素" : result1));
int result2 = binarySearch(array, 20);
System.out.println("元素20在数组中的位置: " + (result2 == -1 ? "无此元素" : result2));
int target = 10;
int[] smallerAndLargerElements = findSmallerAndLarger(array, target);
if (smallerAndLargerElements != null) {
System.out.println("小于x的最大元素位置: " + smallerAndLargerElements[0]);
System.out.println("大于x的最小元素位置: " + smallerAndLargerElements[1]);
} else {
System.out.println("元素"x + "不在数组中");
}
}
// 二分搜索函数
private static int binarySearch(int[] arr, int target) {
int low = 0, high = arr.length - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (arr[mid] == target)
return mid;
else if (arr[mid] < target)
low = mid + 1;
else
high = mid - 1;
}
return -1; // 如果没找到目标,则返回-1
}
// 找到小于x的最大元素和大于x的最小元素
private static int[] findSmallerAndLarger(int[] arr, int target) {
int left = 0, right = arr.length - 1, maxIndex = 0, minIndex = 0;
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid] < target) {
maxIndex = mid;
left = mid + 1;
} else {
right = mid - 1;
}
}
left = 0, right = arr.length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid] > target) {
minIndex = mid;
right = mid - 1;
} else {
left = mid + 1;
}
}
return new int[]{maxIndex, minIndex}; // 返回两个元素的数组
}
}
```
这个代码首先实现了二分搜索查找特定元素,然后分别找到了小于和大于目标值的最近边界。如果找不到,则相应位置为数组长度。请注意,这仅适用于升序排列的数组。对于原始题目中的数组,这个版本应该能给出正确的结果。