难点:
查找之前必须把数组排序,从大到小或从小到大都可以,不排序没法查找。
定义三个变量,min代表数组的开始脚标;max代表数组的结束角标,mid代表数组的中间角标
如果要查找的数大于数组Array[mid],则把min的值设置为mid+1;
如果要查找的数小于数组Array[mid],则把min的值设置为max-1;
如果要查找的数等于数组Array[mid],则把角标mid返回;
import org.junit.Test; import java.util.Arrays; public class Demo { @Test public void test() { int[] arr = {4,1,25,11,16,10,21,8}; Arrays.sort(arr); System.out.println(Arrays.toString(arr)); int index = binarySearch(arr,19); System.out.println(index); } public int binarySearch(int[] arr,int key) { //定义三个指针变量。 int min = 0; int max = arr.length - 1; int mid = 0; //循环折半,条件, min<=max while(min <= max) { //公式,计算中间索引 mid = (min+max)/2; //让被找元素和中间索引元素进行比较 if(key>arr[mid]) { min = mid +1; }else if(key <arr[mid]) { max = mid -1; }else { //找到元素,返回元素索引 return mid; } } return -1; } }
详情参考:
https://www.cnblogs.com/yinzhengjie/p/8878221.html
后记:
2020年3月2日 星期一 农历2020年二月初九 上海 晴 气温14.3摄氏度,比较冷。