【发布时间】:2021-09-29 13:25:49
【问题描述】:
为什么当我看到二进制搜索的示例代码时,从来没有一个 if 语句来检查数组的开头或结尾是否是目标?
import java.util.Arrays;
public class App {
public static int binary_search(int[] arr, int left, int right, int target) {
if (left > right) {
return -1;
}
int mid = (left + right) / 2;
if (target == arr[mid]) {
return mid;
}
if (target < arr[mid]) {
return binary_search(arr, left, mid - 1, target);
}
return binary_search(arr, mid + 1, right, target);
}
public static void main(String[] args) {
int[] arr = { 3, 2, 4, -1, 0, 1, 10, 20, 9, 7 };
Arrays.sort(arr);
for (int i = 0; i < arr.length; i++) {
System.out.println("Index: " + i + " value: " + arr[i]);
}
System.out.println(binary_search(arr, arr[0], arr.length - 1, -1));
}
}
在此示例中,如果目标是 -1 或 20,则搜索将进入递归。但是它添加了一个 if 语句来检查目标是否是中间,那么为什么不再添加两个语句来检查它是左还是右呢?
【问题讨论】:
标签: binary-search