1. 算法思想
折半查找又叫二分查找,要求待查找的有序序列(比如数组)。每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程。直到查找到了返回为止,否则序列中没有待查的关键字。
2. 代码实现
/**
* 详述: 二分查找法--非递归直接查找
* 前提条件: 数组为升序数组
* @param array
* @param a
* @return
*/
public static int BiSearch(int []array,int find){
int low = 0;
int high = array.length;
int mid = 0;
while(low < high){
mid=low+((high-low)/2); //直接low+high有整型溢出的风险
if(array[mid] == find){
return mid + 1;
}
else if(array[mid] > find){
high = mid - 1;
}else if(array[mid] < find){
low = mid + 1;
}
}
return -1;
}
/**
* 详述: 二分查找法--递归查找
* 前提条件: 数组为升序数组
* @param array
* @param find
* @param low
* @param high
* @return
*/
public static int BiSearchRecursion(int []array, int find, int low, int high){
int mid=low+((high-low)/2); //int mid = (low + high) / 2; 直接low+high有整型溢出的风险
if(array[mid] == find){
return mid+1;
}else if(array[mid] > find){
return BiSearchRecursion(array, find, low, mid-1);
}else if(array[mid] < find){
return BiSearchRecursion(array, find, mid+1, high);
}
return -1;
}