常见查找算法实现(Java)
线性查找 适用于无序数组或链表,逐个比较元素直到找到目标值。
public int linearSearch(int[] arr, int target) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] == target) {
return i;
}
}
return -1;
}
二分查找 要求数组必须有序,通过不断缩小搜索范围来定位元素。
public int binarySearch(int[] arr, int target) {
int left = 0, right = arr.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target) return mid;
if (arr[mid] < target) left = mid + 1;
else right = mid - 1;
}
return -1;
}
插值查找 适用于均匀分布的有序数组,通过预测目标位置加速搜索。
public int interpolationSearch(int[] arr, int target) {
int low = 0, high = arr.length - 1;
while (low <= high && target >= arr[low] && target <= arr[high]) {
int pos = low + ((target - arr[low]) * (high - low)) / (arr[high] - arr[low]);
if (arr[pos] == target) return pos;
if (arr[pos] < target) low = pos + 1;
else high = pos - 1;
}
return -1;
}
哈希表查找 利用哈希函数实现O(1)时间复杂度的查找。
import java.util.HashMap;
HashMap<Integer, String> map = new HashMap<>();
map.put(1, "Apple");
map.put(2, "Banana");
String result = map.get(2); // 返回"Banana"
二叉搜索树查找 基于树结构的查找方法,适合动态数据集。
class TreeNode {
int val;
TreeNode left, right;
TreeNode(int x) { val = x; }
}
public TreeNode searchBST(TreeNode root, int val) {
if (root == null || root.val == val) return root;
return val < root.val ? searchBST(root.left, val) : searchBST(root.right, val);
}
算法选择建议
- 小规模无序数据:线性查找
- 静态有序数据:二分查找
- 均匀分布有序数据:插值查找
- 需要频繁插入/删除:二叉搜索树或哈希表
- 极致查询速度:哈希表(需考虑哈希冲突问题)

被折叠的 条评论
为什么被折叠?



