1、题干:在数组中用二分查找元素
2、答题思路:通过对数组不断折半查找,与中间值比较大小后,选择相应的数组区间
3、关键代码:
//本函数使用递归方法,调用find(数组,查询的值,起始下标,末尾下标)如find1(array,x,0,array.length-1),找到返回下标,否则返回-1,查找前必须先升序排序public static int find1(int a[],int x,int min,int max){
int k=(min+max)/2;
if(a[k]<x&&k<max)
return find1(a,x,k+1,max);
else if(a[k]>x&&k>min)
return find1(a,x,min,k-1);
else if(a[k]==x)
return k;
return -1;
}
//普通方法的二分,while条件改写min<max则可以简化判断条件public static int find2(int a[],int x,int min,int max){
while(true){
int k=(min+max)/2;
if(a[k]<x&&k<max){
min=k+1;
}
else if(a[k]>x&&k>min){
max=k-1;
}
else if(a[k]==x)
return k;
else
return -1;
}
}