适用范围:
- 数组有序
- 在有序且数组元素庞大的情况下查找的速度比较快
要求:
查找某个有序数组中是否包含某个指定,存在返回该数,不存在返回-1.
代码如下:
public static int BinarySearch(int target, int[] arr){
int left = 0;
int right = arr.length-1;
while (left <= right){
int mid = (left + right)/2;
System.out.print(arr[mid] + " ");
if (target > arr[mid]){
left = mid + 1;
} else if (target < arr[mid]){
right = mid - 1;
} else {
System.out.println("\n二分法找到元素" + target);
return target;
}
}
System.out.println("\n二分法未到元素" + target);
return -1;
}
public static void main(String[] args) {
int[] arr = {1,23,66,86,93,234,356,560};
int i = BinarySearch(87, arr);
}
运行结果如下:
查找过程如下:
(0,7) ,mid=3(86), target>mid,mid+1;
(4,7) ,mid=5(234),target<mid,mid-1;
(4,4) ,mid=4(93), target<mid,mid-1;
(4,3) ,left>right ,循环终止
注意:
while循环的条件要包含left==right的情况,不然无法处理某次二分过程中左边界与右边界重合的情况。