# 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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。