二分搜索(Binary Search)是一种非常高效的搜索算法,它的前提条件是数据结构(通常是数组)必须是有序的。二分搜索的基本思想是将搜索的键与数组中间的元素进行比较,如果匹配则搜索结束,如果搜索键小于中间元素,则在数组的左半部分继续搜索,反之,则在右半部分继续搜索。这个过程一直重复,直到找到搜索键或者剩下的待搜索部分为空。
以下是使用Java实现二分搜索的示例:
public class BinarySearch {
// 二分搜索方法
public static int binarySearch(int[] array, int target) {
int left = 0;
int right = array.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2; // 防止溢出
if (array[mid] == target) {
return mid; // 找到目标返回索引
} else if (array[mid] < target) {
left = mid + 1; // 继续在右半部分搜索
} else {
right = mid - 1; // 继续在左半部分搜索
}
}
return -1; // 搜索失败返回-1
}
public static void main(String[] args) {
int[] data = {2, 3, 4, 10, 40}; // 必须是有序数组
int target = 10;
int result = binarySearch(data, target);
if (result != -1) {
System.out.println("找到元素 " + target + " 在索引 " + result);
} else {
System.out.println("元素 " + target + " 未在数组中找到。");
}
}
}
在这段代码中,binarySearch
方法接收一个排序后的数组和一个目标值。然后通过迭代地将目标值与数组中间元素比较,逐步缩小搜索范围,直到找到目标值或者确定目标值不在数组中。
二分搜索的时间复杂度是O(log n),其中n是数组中元素的数量。这比线性搜索的O(n)时间复杂度要有效得多,尤其是在处理大量数据时。不过,需要注意的是,二分搜索只适用于已经排序的数组。如果数组未排序,你需要先对数组进行排序,或者使用其他搜索算法。