在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