文章目录
数组中会经常遇到查找某个元素是否在数组中的场景,我们最经常使用的是二分法数组查找 BinarySearch
package Query;
import java.util.Arrays;
public class BinarySearch {
public static void main(String[] args) {
int[] a = {32,43,49,1,86,84,84,5,78,69,32,44,32,98};
//首先将数组进排序,排序方法略
Arrays.sort(a);
//下面介绍二分法查找
//Arrays类提供的方法会返回所查找到的数组下标
//如果没有找到会返回负数
System.out.println(Arrays.binarySearch(a, 8));
}
}
下面详细介绍算法,首先如果要查找的数比中间数小,则在前半部分中查找(中间位置的之前一个),如果要查找的数比中间数大,则在后半部分查找(中间位置的之后一个)。直到区间被锁定到一个数。
如果起始位置比结束位置大则证明没有找到。
//下面我们写出二分法查找的算法
//首先分别定义区间的开始位置和结束位置
int start = 0;
int end =a.length-1;
while(start<=end) {//当查找完成时,结束位置会小于起始位置
//先定义中间值
int middle = (start+end)/2;
if(84<a[middle]) {
//如果要查找的数小于等于中间数则取前半部分
end = middle-1;
}else if(84>a[middle]){
//如果要查找大于中间数则取后半部分
start = middle+1;
}else{
System.out.println("你要找的在第"+middle+"号位置");
break;
}
}
if(start>end) {
System.out.println("该数组中没有您要找的数");
}
}