栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java 数组查找

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

         上代码

        // 有序数组
        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 ,极大的提高了程序运行效率

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/358193.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号