二分法查找也叫折半查找,适用于数据量较大时,但是数据需要先排好顺序!
实现思路:
1.首先找到中间值,如果要查找的数据就为中间值,你是真的牛皮!
2.如果要找的数据小于中间值,则在左边较小的数据里查找!
3.如果要找的数据大于中间值,则在右边较大的数据里查找!
非递归java实现:
public class BinaryTest {
public static void main(String[] args) {
//声明一个有序的数组
int[] arry = new int[]{-99,-50,-30,-22,-1,3,6,59};
int head=0; //最小索引
int end=arry.length-1; //最大索引
int find=-30; //要查找的值
boolean flag=true; //标记
while(head <=end){
int mid = (head+end)/2;
if(arry[mid]==find){
System.out.println("找到了,位置在"+mid);
flag=false;
break;
}else if(arry[mid]>find){
end = mid-1;
}else if(arry[mid]<find){
head = mid+1;
}
}
if(flag){
System.out.println("没找到");
}
}
}
执行结果:
递归java实现:
public class BinaryTest2 {
public static int isQuery(int[] arr,int find,int head,int end){
int mid = (head+end)/2;
if(head >end){
System.out.println("找不到呀");
return -1;
}
if(arr[mid]==find){
System.out.println("找到了,位置在"+mid);
return mid;
}else if(arr[mid]>find){
end = mid-1;
return isQuery(arr,find,head,end);
}else if(arr[mid]<find){
head = mid+1;
return isQuery(arr,find,head,end);
}
return mid;
}
public static void main(String[] args) {
int[] arr = new int[]{-99,-50,-30,-22,-1,3,6,59};
int find=6;
isQuery(arr,find,0,arr.length-1);
}
}
执行结果: