二分查找法:
定义一个数组中间的下标,然后用这个下标值去对我们输入的值进行比较,如果等于中间值,那就直接输出这个中间值的下标;如果小于中间值,则可以再从中间值减一的下标与数组第一个下标再取中间中间值进行比较;如果大于中间值,则可以再从中间值加一的下标与最后一个下标再取中间值进行比较。依次类推,如果找到了这个值则输入它的下标,没找到就直接输入没找到。
package Work;
public class work03 {
public static void main(String[] args) {
int [] arr = {10,20,30,44,55,66,77,88};
//search1(arr,89,0,arr.length-1);
search2(arr,30,0,arr.length-1);
}
private static void search2(int [] arr,int X,int start,int end) {
while (start <= end) {
int mid = (start + end) /2;
if (arr[mid] == X) {
System.out.println("找到了,下标为:" + mid);
return;
} else if (arr[mid] > X) {
end = mid - 1;
} else {
start = mid + 1;
}
}
System.out.println("找不到");
}
private static void search1(int [] arr,int X,int start,int end) {
//定义查找范围,求出中间值下标
int mid= (start +end)/2;
//和中间数比较
if(arr[mid] == X){
System.out.println("找到了,下标为:" + mid);
return;
}else if(arr[mid]>X){//区间在左边
end =mid -1;
}else{//区间在右边
start = mid+1;
}
//正常的范围
if(start<=end){
//递归
search1(arr,X,start,end);
}else{
System.out.println("找不到");
}
}
}