二分查找也叫折半查找,每次可以去掉一半的查找范围,从而提高查找的效率;使用时要求数组按从小到大的顺序排列;
二分查找代码
public class Text03 {
public static void main(String[] args) {
int num=10;
int[]arr={1,2,3,4,5,6,7,8};
// 利用find Method1查找num在集合中的索引
int a=findMethod1(num,arr);
if (a!=-1){
System.out.println(“你所查找的元素在数组中的索引为:”+a);
}else {
System.out.println(“你所查找的元素不存在”);
}
}
private static int findMethod1(int num,int[]arr) {
int min=0;
int max=arr.length-1;
while(min<=max){
// 定义指针,指针的位置为所查找数组的中间位置
int mid =(min+max)/2;
if (arr[mid]>num){
// mid指向的元素在num的右边
max=mid-1;
}else if (arr[mid]<num){
// mid指向的元素在num的左边
min=mid+1;
}else {
// mid指向的元素==number
return mid;
}
}
// 如果min>max说明num不存在,返回-1
return -1;
}
}
二分查找图解
第一次查找,mid=4<num,说明num在min的右边,min指针移动到
mid+1=5,mid=(max+min)/2=5;
此时再次对比mid<num,说明num在min的右边,min指针移动到mid+1=7,mid=(max+min)/2=7;
此时再次对比mid<num,说明num在min的右边,min指针移动到mid+1=8,mid=(max+min)/2=8;
此时再次对比mid<num,说明num在min的右边,min指针移动到mid+1=9,此时min>max,说明num不在数组中,返回值为-1;