二分查找: 递归与非递归实现
程序员文章站
2024-03-19 15:37:34
...
/***
* 二分查找
* 递归版本
* @param array
* @param key
* @param start
* @param end
* @return
*/
public static int binarySearch(int[] array, int key, int start, int end){
int mod = (start+end)/2;
if(array[mod]==key) {
return mod;
}
//上面已经判断了是否找到 所以这 需要加=
if(start >= end) {
return -1;
}
else if(array[mod]>key) {
return binarySearch(array,key,start,mod-1);
}
else{
return binarySearch(array,key,mod+1,end);
}
}
/***
* 非递归二分查找
* @param array
* @param key
* @param start
* @param end
* @return
*/
public static int binarySearch1(int[] array, int key, int start, int end){
int mod ;
if(array.length < 1){
return -1;
}
//下面才开始判断是否找到所以需要=
while(start<=end) {
mod = (start+end)/2;
if(array[mod]==key) {
return mod;
}
else if(array[mod]>key) {
end =mod-1;
}
else{
start =mod+1;
}
}
return -1;
}