1.code
package com.yl.pdfdemo.day02;
/**
* @Author wfj
* @Date 2021/1/22
* @Description 二分法查找
* @Version 1.0
*/
public class BinarySearch {
public static void main(String[] args) {
/**
* 二分查找法
* 前提:
* 数组必须有序
*
* 取中间值,拿目标值和中间值比较,目标值比中间值大,就往数组的右半部分继续找,否则就往数组的左半部分查找
*/
int[] arr = new int[] {-100,-30,10,20,50,190,200,500};
int dest1 = -30;
int start = 0; //初始的首索引
int end = arr.length - 1; //初始的末索引
boolean flag = true;
while(start <= end) {
int mid = (end + start) / 2;
if (dest1 == arr[mid]) {
System.out.println("目标已找到,位置为:" + mid);
flag = false;
break;
} else if (arr[mid] > dest1) {
//如果中间值比目标值要大,那么我们应该是要往数组的左半部分去找,所以end = mid - 1
end = mid - 1;
} else {
//如果中间值比目标值要小,代表着目标值在数组的右半边部分,所以start = mid + 1
start = mid + 1;
}
}
if (flag) {
System.out.println("目标不存在!!!");
}
}
}
2.结果