闲来无事,试试写写二分法查找,听说效率高,那就试试呗,顺便做个笔记。
1.用循环的方式去实现
//二分法查找 循环
private int binarySearche(int[] num,int key)
{
int low=0;
int high=num.length-1;
int nofount=-1;
while (low<=high)
{
int mid=low+(high-low)/2;
if(num[mid]>key)
{
high=mid-1;
}else if(num[mid]<key)
{
low=mid+1;
}else {
return mid;
}
}
return nofount;
}
这个其实真的很简单,前提条件就是必须是一个有序数组或是集合。
2. 递归写法
//递归二分法查找
private int binarySearchRecursion(int[] num,int key,int begin,int end)
{
int mid=(begin+end)/2;
if(num[mid]<key)
{
return binarySearchRecursion(num,key,mid+1,end);
}
if(num[mid]>key)
{
return binarySearchRecursion(num,key,begin,mid-1);
}
else
{
return mid;
}
}
对比了一下,怎们感觉循环要比递归快点,少量数据的测试的结果!