9 二分法查找

二分法查找原理

使用二分法查找时需要以下两个条件:

1 没有重复元素
2 已经排好顺序
假设给定一组排好序且没有重复元素的数字,要从这些数字中快速找到x所在的位置,可以从这组数字的中间位置开始找,如果当前值与x相等,则查找成功,如果小于x则从后半段的中间位置继续找,如果大于x则从前半段的中间位置继续寻找,直到找到x所在的位置

例如一个数组里面的元素有:1,5,8,15,18,23,30
快速找到23对应的下标值
第一次:取得数组的中间位置的值15,15小于23,所以继续从后半段开始找,后半段的元素是18,23,30
第二次:取得数组后半段元素中间位置的值23,23等于23,即找到23对应的下标值5

代码实现

public class MyArrays{

    public static void main(String[] args){

        int[] a = {1,5,8,15,18,23,30};

        int destElement = 23;

        //要求从a数组中查找23这个元素的下标
        int index = binarySearch(a,destElement); 
        //如果找到则返回元素的下标,如果找不到统一返回 -1

        System.out.println((index==-1)? destElement + "元素不存在!":destElement + "在数组中的下标是:" + index);

    }


    //二分法查找的核心算法
    public static int binarySearch(int[] a,int destElement){

        int begin = 0;
        int end = a.length-1;



        while(begin <= end){

            int middle = (begin + end)/2;    

            if(a[middle]==destElement){
                return middle; 
            }else if(a[middle]>destElement){
                end = middle - 1;
            }else if(a[middle] < destElement){
                begin = middle + 1;
            }
        }

        return -1;

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值