对有序的数组可以用二分法查找出要查的数(这是递归查找)
那么假如给我们的条件是一个无序的数,那么我们先将数进行排序(各种排序算法请看我的其他文章),然后查找。
package suanfa;
/**
* 二分查找平均时间复杂度 O(logN)
* 说明:数组array是一个有升序的数组
* @author lackiechan
*
*/
public class BinarySearch {
/**
* @param begin 查找区间的左边
* @param end 查找区间的右边
* @param searchKey 要查找的值
* @param array 数组(从这个数组中查找)
* @return 查找结果(数组的下标位置)
*/
public static int binarySearch(int begin,int end,int searchKey,int... array){
if(begin>end){
return -1;
}
else{
int mid=(begin+end)/2;//折半查找
if(array[mid]==searchKey){
return mid;
}
if(array[mid]<searchKey){
begin=mid+1;//变换查找区间
}
if(array[mid]>searchKey){
end=mid-1;//变换查找区间
}
return binarySearch(begin,end,searchKey,array);
}
}
/**测试查找结果
* @param args
*/
public static void main(String[] args) {
int[] test=new int[]{1,2,3,3,5,6,7,9,12};//升序序列
int index=BinarySearch.binarySearch(0, test.length, 3, test);
System.out.println("查找到的位置 :"+ index);
}
}