递归实现:
public int GetIndex(int[] array,int k,int low,int high)
{
int mid=(high-low)/2+low;//[3],3 的情况,只有一个数字,且该数字是我们要找的数字,因此把求中间放在判断low和high前面
if(array[mid]==k)
{
return mid;
}
if(low>=high)
{
return -1;
}
else if(array[mid]>k)
{
return GetIndex(array,k,low,mid-1);
}
else if(array[mid]<k)
{
return GetIndex(array,k,mid+1,high);
}
return -1;
}
应该注意,将mid=(high-low)/2+1,判断是否相等放在前面,如[3],3的情况,将比较low与high的大小放在后面。
非递归实现:
public static int binSearch(int srcArray[], int key)
{
int mid;
int start=0;
int end=srcArray.length;
while (start <= end)
{
mid = (end - start) / 2 + start;
if (key < srcArray[mid]) {
end = mid - 1;
}
else if(key>srcArray[mid])
{
start=mid+1;
}
else
{
return mid;
}
}
return -1;
}