查找算法--------二分查找算法

二分查找算法

1.二分查找又称折半查找

优点:比较次数少,查找速度快,平均性能好

缺点:待查表为有序表

2.注意事项

(left+right)/2:会出现溢出的现象
判断条件是中间位置的值是否小于0
我们的对比条件就已经排除mid下标的值,所以可以放心的-/+ 1,而且这样会符合二的条件避免死循环!

3.代码逻辑步骤

① 首先确定整个查找区间的中间位置 mid = left + (right - left) / 2;
② 用待查关键字值与中间位置的关键字值进行比较;
  若相等,则查找成功
  若大于,则在后(右)半个区域继续进行折半查找
  若小于,则在前(左)半个区域继续进行折半查找
③ 对确定的缩小区域再按折半公式,重复上述步骤。

4.算法使用条件

​ 1.存储在顺序表中

​ 2.有序排列

5.实现方法分为递归方法和非递归方法

5.1 非递归方法

    private static int notRecursion(int[] intArr, int num) {
        int left = 0;
        int right = intArr.length;
        //结束条件
        while (left <= right) {
            //不要写成mid = ( left + right )/ 2 相加可能会发生越界
            int mid = left + (right - left) / 2;
            if (intArr[mid] == num) {
                return mid;
            } else if (intArr[mid] > num) {
                //避免死循环
                right = mid-1;
            } else if (intArr[mid] < num) {
                //避免死循环
                left = mid+1;
            }
        }
        return -1;
    }

5.2递归方法

    private static int Recursion(int[] intArr, int left, int right, int num) {
        int mid = left + (right - left) / 2;
        if (intArr[mid] == num) {
            return mid;
        }else if (left >= right) {
            return -1;
        } else if (num > intArr[mid]) {
            return Recursion(intArr, mid + 1, right, num);
        } else if (num < intArr[mid]) {
            return Recursion(intArr, left, mid - 1, num);
        }
        return -1;
    }

5.3 主方法

    public static void main(String[] args) {
        int[] intArr = new int[]{1, 2, 3, 4, 5};
        int notrecursion = notRecursion(intArr, 5);
        int recursion = Recursion(intArr, 0, intArr.length-1, 1);
        System.out.println(notrecursion);
        System.out.println(recursion);
    }

版权声明:本博客为记录本人自学感悟,转载需注明出处!
https://me.csdn.net/qq_39657909

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值