【算法】常用的查找算法之二分查找法

二分查找算法

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;          
        }

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值