Java 二分查找
思路
问题描述:在采用顺序存储结构的有序数组中,查找目标元素,如果目标元素存在,返回对应的数组下标。
假设查找的有序数组为升序,二分查找采用以下的思路进行解决:
-
将数组中间位置的元素与目标元素比较,如果二者相等,则查找成功;否则,从中间位置将数组分为前、后两个数组;
-
如果中间位置的元素大于目标元素,则进一步查找前一数组;否则,进一步查找后一数组;
-
重复步骤(1)和(2),直到找到满足条件的元素,返回数组下标,查找成功;否则,查找失败。
代码
public int BinaryFind(int[] arr, int target) {
int left = 0, right = arr.length - 1, mid = 0;
// 判断数组下标left是否大于下标right, 如果left>right,说明无法拆分数组,查询结束
while (left <= right) {
mid = left + (right - left) / 2;
if (target < arr[mid]) {
right = mid - 1;
} else if (target > arr[mid]) {
left = mid + 1;
} else {
return mid;
}
}
return -1;
}