您的位置:首页 > 编程语言 > Java开发

二分查找之Java实现

2017-08-18 13:09 441 查看
非递归与递归两种方法实现:

/**
* 二分查找:非递归的方法
* 缺点:有序数组中含有多个待查找的数值的时候,这种方法只能显示一个
* @param src  //带查找的有序数组
* @param des  //带查找的数值
* @return     //查找数值的下标,没有查找到返回-1
*/
public int binarySearch(int[] src, int des) {
int begin = 0;
int end = src.length - 1;
while (begin <=end) {
int middle = begin + (end - begin) / 2;
if(des==src[middle])
return middle;
else if(des<src[middle]){
end=middle-1;
}
else if(des>src[middle]){
begin=middle+1;
}
}
return -1;
}

/**
* 递归的方法进行二分查找
* @param src
* @param des
* @param begin  //开始查找数组的下界
* @param end    //开始查找数组的上界
* @return       //查找数值的下标,没有查找到返回-1
*/
public int binarySearch(int[] src,int des,int begin,int end){
int middle=begin+(end-begin)/2;
if(des<src[begin]||des>src[end]||begin>end){
return -1;
}
if(des<src[middle]){
return binarySearch(src,des,begin,middle-1);
}else if(des>src[middle]){
return binarySearch(src,des,middle+1,end);
}else {
return middle;
}
}


其时间复杂度为:O(log2n)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息