转载自:http://bo-hai.iteye.com/blog/889287
递归方法
/**
* @author hbliu
* @param arrayData 数组
* @param searchData 要查找的数据
* @param start 开始下标
* @param end 结束下标
* @return 数据在数组中下标的位置,如果数据不在数组中,返回 -1
* 功 能:折半查找
*/
public static int splitHalf(int[] arrayData,int searchData,int start,int end){
int index = (start + end)/2;
int data = arrayData[index];
if(start > end ){
return -1;
}
if(data == searchData){
return index;
}else if(data < searchData){
return splitHalf(arrayData,searchData,index+1,end);
}else{
return splitHalf(arrayData,searchData,start,index-1);
}
}
}
非递归的方法:
public static int splitHalf(int[] arrayData,int searchData){
int start =0;
int end = arrayData.length-1;
while(start<=end){
int mid = (start+end)/2;
int data = arraryData[mid];
if(searchData==data)
return mid;
else{
if(searchData<data){
end = mid-1;
}else{
start = mid+1;
}
return -1;
}