1.一般方法
public class Binary {
/**
* 二分查找
* @param a 数组名字本身就是一个对象
* @param x 要查找的整数值
* @return 值在数组中的下标
*/
public int binary_serach(int []a,int x)
{
int upper_bound=a.length-1,lower_bound=0,midpoint,value_at_midpoint;
while(lower_bound<=upper_bound)
{
midpoint=(upper_bound+lower_bound)/2;
value_at_midpoint=a[midpoint];
if(value_at_midpoint==x)
return midpoint;
else if(value_at_midpoint<x)
lower_bound=midpoint+1;
else
upper_bound=midpoint-1;
}
return 0;
}
public static void main(String args[])
{
int []a= {1,2,3,4,5,6,7,8,9,10};
Binary e=new Binary();
System.out.println(e.binary_serach(a,7));
}
}
2.递归
public class Binary_recursion {
/**
*
* @param a 数组名
* @param x 查找的数值
* @param upper_bound 上界
* @param lower_bound 下界
* @return 值在数组中的下标
*/
public int binary_serach(int []a,int x,int upper_bound,int lower_bound)
{
int midpoint,value_at_midpoint;
while(lower_bound<=upper_bound)
{
midpoint=(upper_bound+lower_bound)/2;
value_at_midpoint=a[midpoint];
if(value_at_midpoint==x)
return midpoint;
else if(value_at_midpoint<x)
{
binary_serach(a,x,upper_bound,midpoint+1);
}
else {
binary_serach(a,x,midpoint-1,lower_bound);
}
}
return 0;
}
public static void main(String[] args) {
int []a= {1,2,3,4,5,6,7,8,9,10};
Binary e=new Binary();
System.out.println( e.binary_serach(a,7));
}
}