-
public class Find
-
{
-
//使用非递归方法实现
-
public static int binFind1(int[] orderedArr, int numFind)
-
{
-
int hi = 0, mid=0,lo = 0;
-
hi = orderedArr.length - 1;
-
lo = 0;
-
-
while(lo<=hi)
-
{
-
mid = (hi + lo) / 2;
-
if (numFind == orderedArr[mid])
-
{
-
//直接返回结束当前运行方法
-
return (hi + lo) / 2;
-
-
}
-
if (numFind > orderedArr[mid])
-
{
-
//改变下角标
-
//【注】理解为什么+1,因为这样的二分之后改变了首部
-
lo = mid+1;
-
}
-
if(numFind<orderedArr[mid])
-
{
-
//改变上角标
-
//【注】理解为什么-1,因为这样的二分之后改变了尾部
-
hi=mid-1;
-
}
-
-
}
-
//未找到
-
return -1;
-
}
-
-
//使用递归方法实现:
-
public static int binFind2(int arr[],int lo/*七点*/,int hi/*终点*/,int num/*要查找的数字*/)
-
{
-
if(lo<=hi)// 注意这里的条件是<=
-
{
-
int mid = (lo+hi)/2;
-
-
if(num<arr[mid])
-
{
-
return binFind2(arr,lo,mid - 1,num);
-
}
-
if(num>arr[mid])
-
{
-
return binFind2(arr,mid +1,hi,num);
-
}
-
if(arr[mid]==num)
-
{
-
return mid;
-
}
-
-
}
-
return -1;//未找到
-
}
-
public static void main(String[] args)
-
{
-
// TODO Auto-generated method stub
//测试用例
-
int[] orderedArr = {1,2,3,4,6,7,8};
-
System.out.println(binFind2(orderedArr,0,orderedArr.length,5));
-
-
}
-
-
}