java 数组查找

1、普通查找

        对数组循环遍历,依次比较匹配,时查找算法中最基础,最简单的算法

        int[] scores = {45, 62, 15, 78, 30};
        int target = 62;
        int index = -1; // 保存查找到的位置

        for (int i = 0; i < scores.length; i++) {
            // 用要查找的目标,依次与数组中的每个元素进行比较
            if (target == scores[i]) {
                index = i;
                break;
            }
        }

        // 打印查找结果,与循环查找分开,便于代码分析
        if (index != -1) {
            System.out.println("找到了, 当前下标位置为:" + index);
        } else {
            System.out.println("没有找到");
        }

2、二分法查找

        与插入排序算法类似,它作用对象的前提是一个有序数组

        先设立最小值角标、最大值角标以及中间值角标。从最中间值开始比较,若比较值比查找值大,则在剩下数列的左半轴重新划分最大值、最小值以及中间值,再进行比较查找;否则在右半轴进行相关操作;若不存在该值,最后会使得min<max,退出循环

         上代码

        // 有序数组
        int[] scores = {15, 38, 47, 78, 93};
        // 保存最小值的位置
        int min = 0;
        // 保存最大值的位置
        int max = scores.length - 1;
        // 保存中间值位置,每次循环开始都需重新计算
        int mid = 0;

        // 要查找的数
        int target = 38;
        // 查找状态
        boolean flag = false;

        // 每当min和max在正常范围内,要计算出来
        while (min <= max) {
            // 每次循环前,初始化mid值
            mid = (max + min) / 2;
            // 比较目标对象和mid位置元素的大小
            if (target < scores[mid]) {
                // 小于时,范围重新判定为mid值左边部分,重新定义max值
                max = mid - 1;
            } else if (target > scores[mid]) {
                // 大于时,范围重新判定为mid值右边部分,重新定义min值
                min = mid + 1;
            } else {
                // 找到,状态改变,退出循环
                flag = true;
                break;
            }
        }

        不难看出,每一次查找之后,查找区间都会缩小一半,时间复杂度 为 log(2)n ,极大的提高了程序运行效率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值