导读:本期聚焦于小伙伴创作的《Java如何实现并测试线性搜索和二分搜索算法》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Java如何实现并测试线性搜索和二分搜索算法》有用,将其分享出去将是对创作者最好的鼓励。

在Java开发中,搜索算法是处理数据查找需求的核心工具,线性搜索和二分搜索是两种最基础的搜索实现方式,二者的适用场景和性能表现存在明显差异,掌握它们的实现与测试方法对日常开发有重要意义。

Java如何实现并测试线性搜索和二分搜索算法

线性搜索算法实现

线性搜索也叫顺序搜索,它的逻辑是从数组的第一个元素开始,逐个遍历数组中的每个元素,直到找到目标值或者遍历完整个数组。这种算法不需要数组事先排序,适用于任意顺序的数据集合,但是时间复杂度较高,为O(n)。

下面是线性搜索的Java实现代码:

public class LinearSearch {
    // 线性搜索方法,返回目标值的索引,未找到返回-1
    public static int linearSearch(int[] arr, int target) {
        // 遍历数组每个元素
        for (int i = 0; i < arr.length; i++) {
            // 如果当前元素等于目标值,返回索引
            if (arr[i] == target) {
                return i;
            }
        }
        // 遍历完未找到,返回-1
        return -1;
    }
}

二分搜索算法实现

二分搜索也叫折半搜索,它的前提是待搜索的数组必须是已经排好序的升序数组。算法逻辑是每次取数组中间的元素与目标值比较,如果中间元素等于目标值则返回索引,如果中间元素小于目标值则在右半部分继续查找,如果中间元素大于目标值则在左半部分继续查找,直到找到目标值或者查找范围为空。二分搜索的时间复杂度为O(log n),效率远高于线性搜索,但要求数据必须有序。

下面是二分搜索的Java实现代码:

public class BinarySearch {
    // 二分搜索方法,返回目标值的索引,未找到返回-1
    public static int binarySearch(int[] sortedArr, int target) {
        int left = 0;
        int right = sortedArr.length - 1;
        // 当左边界不大于右边界时继续查找
        while (left <= right) {
            // 计算中间索引,避免整数溢出
            int mid = left + (right - left) / 2;
            // 中间元素等于目标值,返回索引
            if (sortedArr[mid] == target) {
                return mid;
            } else if (sortedArr[mid] < target) {
                // 中间元素小于目标值,查找右半部分
                left = mid + 1;
            } else {
                // 中间元素大于目标值,查找左半部分
                right = mid - 1;
            }
        }
        // 未找到目标值,返回-1
        return -1;
    }
}

两种搜索算法的测试

实现算法后需要编写测试用例验证其正确性,我们可以分别测试两种算法在不同场景下的表现,包括找到目标值和未找到目标值的情况。

下面是测试代码的实现:

import java.util.Arrays;

public class SearchTest {
    public static void main(String[] args) {
        // 测试线性搜索
        int[] unorderedArr = {3, 1, 5, 7, 2, 9, 4};
        int target1 = 7;
        int target2 = 10;
        System.out.println("线性搜索测试:");
        System.out.println("查找" + target1 + "的索引:" + LinearSearch.linearSearch(unorderedArr, target1));
        System.out.println("查找" + target2 + "的索引:" + LinearSearch.linearSearch(unorderedArr, target2));

        // 测试二分搜索,需要先对数组排序
        int[] orderedArr = Arrays.copyOf(unorderedArr, unorderedArr.length);
        Arrays.sort(orderedArr);
        System.out.println("n排序后的数组:" + Arrays.toString(orderedArr));
        System.out.println("二分搜索测试:");
        System.out.println("查找" + target1 + "的索引:" + BinarySearch.binarySearch(orderedArr, target1));
        System.out.println("查找" + target2 + "的索引:" + BinarySearch.binarySearch(orderedArr, target2));
    }
}

运行测试代码后,线性搜索查找7会返回索引3,查找10会返回-1;排序后的数组为[1,2,3,4,5,7,9],二分搜索查找7会返回索引5,查找10会返回-1,符合预期结果。

两种算法的对比

我们可以通过下面的表格直观对比两种搜索算法的差异:

对比维度线性搜索二分搜索
数据要求无需排序,任意顺序均可必须是有序的升序数组
时间复杂度O(n)O(log n)
适用场景数据量小、数据无序的场景数据量大、数据有序的场景

在实际开发中,需要根据数据的特征和查找需求选择合适的搜索算法,如果数据量小或者无法提前排序,优先选择线性搜索;如果数据量较大且可以提前排序,二分搜索是更优的选择。

Javalinear_searchbinary_searchalgorithm_test修改时间:2026-07-09 01:54:13

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。