想在数组中找到某个元素的索引位置,从头遍历数组匹配,数组数据少的时候可以,但是数组数据大的时候就会变慢,耗费性能,这时就需要二分查找法
比如:
从1 - 10 之间,判断8 的索引位置
首先求中间索引号,0 - 9 ==》(0+9)/ 2 = 4,则中间索引的数值为 5
判断 8 与中间数值的大小关系
8 > 5,则8位于5 - 10 之间
8 < 5,则8位于1 - 5 之间
8 = 5,则就是我们找的索引
public static void main(String[] args) {
int[] arr = new int[10];
for (int i = 0; i < arr.length; i++) {
arr[i] = i;
}
int a = 7;
int low = 0;
int high = arr.length -1;
while(low < high) {
int mid = (low + high) / 2;
if (arr[mid] > a) {
high = mid;
} else if (arr[mid] < a) {
low =mid;
} else {
System.out.println(mid);
break;
}
}
}
总之意思就是:
查找的值大于中间值,则 最小索引 = 中间索引
查找的值小于中间值,则 最大索引 = 中间索引