/*
* 二分法查找
* 又叫折半查找,要求待查找的序列有序。
* 每次取中间位置的值与待查关键字比较,如果中间位置 的值比待查关键字大,
* 则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,
* 则在后半部分循环这个查找的过程。
* 直到查找到了为止,否则序列中没有待查的关键字。
*/
public class BinarySearch {
public static void main(String[] args) {
int[] arr = { 2, 3, 5, 8, 10, 12, 34, 56, 64 };
int a = 56;
int index = BinarySearch.binarySearch(arr, a); // 数组下标位置
System.out.println(index);
}
public static int binarySearch(int[] array, int a) {
int left = 0;
int right = array.length - 1;
int mid;
while (left <= right) {
mid = (left + right) / 2;
if (array[mid] == a) {
return mid; // 中间位置
} else if (array[mid] > a) {
right = mid - 1; // 向左查找
} else {
left = mid + 1; // 向右查找
}
}
return -1; // 没找到
}
}