/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
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;
}
}
// 如果未找到目标值,返回-1
return -1;
}
public static void main
(String[] args
) { int[] arr = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19}; // 有序数组
int target = 9; // 要查找的目标值
int result = binarySearch(arr, target); // 调用二分查找方法
if (result != -1) {
System.
out.
println("元素 " + target
+ " 在数组中的索引为:" + result
); } else {
System.
out.
println("数组中不存在元素 " + target
); }
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgpjbGFzcyBCaW5hcnlTZWFyY2ggewoKICAgIC8vIOS6jOWIhuafpeaJvuaWueazlQogICAgcHVibGljIHN0YXRpYyBpbnQgYmluYXJ5U2VhcmNoKGludFtdIGFyciwgaW50IHRhcmdldCkgewogICAgICAgIGludCBsZWZ0ID0gMDsgLy8g5a6a5LmJ5bem6L6555WMCiAgICAgICAgaW50IHJpZ2h0ID0gYXJyLmxlbmd0aCAtIDE7IC8vIOWumuS5ieWPs+i+ueeVjAoKICAgICAgICB3aGlsZSAobGVmdCA8PSByaWdodCkgeyAvLyDlvZPlt6bovrnnlYzlsI/kuo7nrYnkuo7lj7PovrnnlYzml7bvvIznu6fnu63mn6Xmib4KICAgICAgICAgICAgaW50IG1pZCA9IGxlZnQgKyAocmlnaHQgLSBsZWZ0KSAvIDI7IC8vIOiuoeeul+S4remXtOS9jee9ru+8jOmBv+WFjeWkp+aVsOa6ouWHugogICAgICAgICAgICBpZiAoYXJyW21pZF0gPT0gdGFyZ2V0KSB7IC8vIOWmguaenOS4remXtOS9jee9rueahOWFg+e0oOato+WlveaYr+ebruagh+WAvO+8jOi/lOWbnuWFtue0ouW8lQogICAgICAgICAgICAgICAgcmV0dXJuIG1pZDsKICAgICAgICAgICAgfSBlbHNlIGlmIChhcnJbbWlkXSA8IHRhcmdldCkgeyAvLyDlpoLmnpzkuK3pl7TkvY3nva7nmoTlhYPntKDlsI/kuo7nm67moIflgLzvvIzor7TmmI7nm67moIflgLzlnKjlj7PljYrpg6jliIYKICAgICAgICAgICAgICAgIGxlZnQgPSBtaWQgKyAxOwogICAgICAgICAgICB9IGVsc2UgeyAvLyDlpoLmnpzkuK3pl7TkvY3nva7nmoTlhYPntKDlpKfkuo7nm67moIflgLzvvIzor7TmmI7nm67moIflgLzlnKjlt6bljYrpg6jliIYKICAgICAgICAgICAgICAgIHJpZ2h0ID0gbWlkIC0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyDlpoLmnpzmnKrmib7liLDnm67moIflgLzvvIzov5Tlm54tMQogICAgICAgIHJldHVybiAtMTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgaW50W10gYXJyID0gezEsIDMsIDUsIDcsIDksIDExLCAxMywgMTUsIDE3LCAxOX07IC8vIOacieW6j+aVsOe7hAogICAgICAgIGludCB0YXJnZXQgPSA5OyAvLyDopoHmn6Xmib7nmoTnm67moIflgLwKICAgICAgICBpbnQgcmVzdWx0ID0gYmluYXJ5U2VhcmNoKGFyciwgdGFyZ2V0KTsgLy8g6LCD55So5LqM5YiG5p+l5om+5pa55rOVCiAgICAgICAgaWYgKHJlc3VsdCAhPSAtMSkgewogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIuWFg+e0oCAiICsgdGFyZ2V0ICsgIiDlnKjmlbDnu4TkuK3nmoTntKLlvJXkuLrvvJoiICsgcmVzdWx0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIuaVsOe7hOS4reS4jeWtmOWcqOWFg+e0oCAiICsgdGFyZ2V0KTsKICAgICAgICB9CiAgICB9Cn0KCgo=