您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Java如何使用二分查找数组中指定元素
二分查找(Binary Search)是一种高效的查找算法,适用于**已排序的数组**。其时间复杂度为O(log n),远优于线性查找的O(n)。本文将详细介绍Java中二分查找的实现方法。
## 一、二分查找原理
二分查找通过以下步骤工作:
1. 确定数组的中间元素
2. 将目标值与中间元素比较:
- 若相等,返回索引
- 若目标值较小,在左半部分继续查找
- 若目标值较大,在右半部分继续查找
3. 重复上述过程直到找到元素或搜索范围为空
## 二、Java实现方式
### 方法1:手动实现
```java
public class BinarySearch {
public static int binarySearch(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[] sortedArray = {1, 3, 5, 7, 9, 11};
int target = 7;
int result = binarySearch(sortedArray, target);
System.out.println("元素索引位置: " + result);
}
}
Java标准库提供了现成的二分查找实现:
import java.util.Arrays;
public class BinarySearchExample {
public static void main(String[] args) {
int[] array = {2, 4, 6, 8, 10};
int key = 8;
int index = Arrays.binarySearch(array, key);
if (index >= 0) {
System.out.println("找到元素,索引: " + index);
} else {
System.out.println("未找到元素");
}
}
}
-insertionPoint - 1
)// 查找第一个出现的位置
public static int firstOccurrence(int[] arr, int target) {
int left = 0;
int right = arr.length - 1;
int result = -1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target) {
result = mid;
right = mid - 1; // 继续向左查找
} else if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return result;
}
public static int findClosest(int[] arr, int target) {
int left = 0;
int right = arr.length - 1;
while (left < right - 1) {
int mid = left + (right - left) / 2;
if (arr[mid] == target) return mid;
else if (arr[mid] < target) left = mid;
else right = mid;
}
return Math.abs(arr[left] - target) <= Math.abs(arr[right] - target) ? left : right;
}
二分查找是处理有序集合的高效算法。Java中既可以通过手动实现,也可以直接使用Arrays.binarySearch()
方法。实际应用中需要注意边界条件和数组的排序状态,对于特殊需求可以自行实现变体算法。
“`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。