1,先不用考虑循环的问题,
先确定第一次找查找的min,max,和mid的值;
2,第二次,根据key<,>,=mid的结果,
计算第二次min,max,mid的值的位置;
3,分析,头两次间的规律,建立循环,内部用if(){}else{}块进行流程控制;
4,设置循环结束条件,就是当max<=min是循环查找结束;
奉上自己写的代码,自己测试没问题;
public class HelloWorld {
public static void main(String []args) {
int[] arr = {1,2,3,4,6,7,8,9};
System.out.println(erFen(arr,10));
}
public static int erFen(int[] arr,int key){
int min,max,mid;
min=0;
max=arr.length-1;
while(max>min){
mid = min+max;
if(key==arr[mid]){
return mid;
}
else if (key<arr[mid]){
max=mid-1;
}
else{
min=mid+1;
}
}
return -min;
}
}
|