二分查找算法
1.前提是当前查找的数列必须是有序的
2.用查找的元素和查找数列中的中间元素进行比较,如果相等则表示成功。
3.如果查找的元素小于中间元素,则去中间元素的左边进行查找。重复执行步骤2的操作。
4.如果查找的元素大于中间元素,则去中间元素的右边进行查找。重复执行步骤2的操作。
5.如果查找的元素与所有的中间元素都比较完毕后都没有找到相等的元素,则查找失败。
//二分查找算法DEMO
public class TestBinaryFindDemo {
public static void main(String[] args){
//二分查找
//使用二分查找的方法去找某个元素
int []array = {1,2,3,4,5};
//调用find查找方法,并将(数组,要查找的数据,0,array.length-1)传入
//我们要使用递归,使用二分法要获取中间的元素,中间值的获取方法初始值下标加上最大下标除以2
int index = find(array,5,0,array.length-1);
System.out.println("当前查找的元素下标是"+index);
}
private static int find(int[] array, int data, int left, int right) {
if(left <= right){
// 1.计算当前数列的中间值的下标
int mid = (left + right)/2;
//2.使用当前要查找的元素和当前数列的中间元素进行比较
if(data == array[mid]){ // 如果相等,直接查找成功
return mid;
}else if(data<array[mid]){ //3.如果查找的元素比中间的元素小,则在中间元素的左边进行查找,重复执行步骤2
// 重复调用步骤2,调用递归调用
return find(array, data, left, mid-1);
}else{ //4.如果查找的元素大于中间元素,则去中间元素的右边进行查找,重复执行步骤2的操作。
return find(array,data,mid+1,right);
}
}else{
//出口
return -1;
}
}
}