📅  最后修改于: 2023-12-03 15:36:03.991000             🧑  作者: Mango
二进制搜索是一种查找特定值的有效方法。它适用于已排序的数组或列表,并且比线性搜索更快。
Java中可以用递归或循环实现二进制搜索。下面是一个示例代码,演示如何在升序排序的数组中使用二进制搜索查找特定值。
/**
* 二进制搜索升序排序数组
* @param arr 升序排序的数组
* @param target 要查找的值
* @return 如果找到,则返回值的索引,否则返回-1。
*/
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; // 如果未找到,则返回-1
}
在这个示例代码中,使用了一个while循环,它将数组分成两半,并检查中间元素。如果目标值等于中间元素,那么搜索就结束了。如果目标值小于中间元素,则说明目标值可能在左侧,更改right值以收缩范围。如果目标值大于中间元素,则说明目标值可能在右侧,更改left值以收缩范围。循环直到找到目标值或搜索范围为空。
二进制搜索的时间复杂度为O(log n),其中n是数组的大小。这使得它成为查找大型数组中特定值的有效方法。
总之,二进制搜索是一种查找特定值的强大方法,适用于已排序的数组。Java中提供了递归和循环实现它的方式。