二分查找(递归和普通迭代)

public static void main(String[] args) {
int[] a = {1,2,3,4,5,6,7,8,9,10,11,12,13,14};
int i = binarySearch2(a,0,13,11);
System.out.println(i);
}
//递归查找
private static int binarySearch(int[] a, int i, int j, int findValue) {
//找到数组的中间索引
int n = (i+j)/2;
//获得数组的中间索引对应的值
int middleValue = a[n];
//如果中间索引的值和要查找的值相同,则返回中间索引
if(findValue==middleValue){
return n;
}
//如果要查找的值大于中间索引对应的值,则在中间索引+1处到数组最后的范围查找
else if(findValue>middleValue){

return binarySearch(a, n+1, j, findValue);
}
//如果要查找的值小于中间索引对应的值,则在0做引至中间索引减一范围查找
else if(findValue
return binarySearch(a, i, n-1, findValue);
}
//查不到返回-1
return -1;
}

//非递归,普通迭代查找
private static int binarySearch2(int[] a,int i,int j,int findValue){
//找到数组的中间索引
int n = (i+j)/2;
//获得数组的中间索引对应的值
int middleValue = a[n];
//如果中间索引的值和要查找的值不相同,则进入迭代,否则返回中间索引下标
while(findValue!=middleValue){
if(findValue>middleValue){
//约束条件
if(n>=j)return -1;
n = (n+1+j)/2;
middleValue = a[n];
}else if(findValue //约束条件
if(n<=0)return -1;
n = (i+n-1)/2;
middleValue = a[n];
}else if(findValue==middleValue){
return n;
}
}
return n;

你可能感兴趣的:(二分查找(递归和普通迭代))