一、查找数组中的指定元素(二分查找)
针对有序数组, 二分查找可以更高效的查找数组中的指定元素。
在有序数组中查找一个元素toFind,我们需要不断比较待查找元素和区间中间位置元素的大小关系
若toFind < arr[mid] -->说明这个元素一定位于左区间,一定小于arr[mid…right]的所有元素,我们从right > = mid - 1开始继续判断。
若toFind > arr[mid] -->说明待查找的元素一定大于左区间所有的值,则从left = mid + 1继续在右区间中查找元素。
若toFind == arr[mid]说明中间位置元素恰好就是待查找元素,直接返回mid。
我们需要特别注意的是,终止这个循环的条件是什么?
while循环中是left < right 还是left <= right?
接下来我们来分析:left < right时,区间中一定还存在元素,且元素数量 >= 2
left == right时,区间中还剩一个元素,如下图,即arr[6]
当left > right时,是一个空区间,不存在任何元素
故循环的终止条件为left > right,此时区间中一个元素都没有,这个数组没有找到对应的元素。
代码如下:
public class BinarySearch {
public static void main(String[] args) {
int[] arr = {
1,2,3,4,5,6};
System.out.println(binarySearch(arr,4));
}
public static int binarySearch(int[] arr,int toFind){
int left = 0;
int right = arr.length - 1;
while (left <= right){
int mid = (left + right) / 2;
if (toFind < arr[mid]){
right = mid - 1;
}else if (toFind > arr[mid]){
left = mid + 1;
}else {
return mid;
}
}
re