🔷 线性搜索 (Linear Search)
-
特点:
- 最基础的搜索算法。
- 逐一检查每个元素,直到找到目标元素或检查完所有元素。
-
优点:
- 简单,易于理解和实现。
- 对于小型列表或无序列表,这是一个合适的选择。
-
缺点:
- 时间复杂度为 (O(n)),对于大型列表,效率不高。
示例:
int linearSearch(int arr[], int x) {
int n = arr.length;
for (int i = 0; i < n; i++) {
if (arr[i] == x) {
return i;
}
}
return -1;
}
🔷 二分搜索 (Binary Search)
-
特点:
- 搜索算法的高效选择。
- 在有序列表中通过分治策略快速查找元素。
-
优点:
- 时间复杂度为 (O(\log n)),对于大型列表,这是非常高效的。
- 比线性搜索快得多。
-
缺点:
- 要求列表是有序的。
- 对于非常小的或者无序的列表,线性搜索可能会更简单或更快。
示例:
int binarySearch(int arr[], int l, int r, int x) {
if (r >= l) {
int mid = l + (r - l) / 2;
if (arr[mid] == x) {
return mid;
}
if (arr[mid] > x) {
return binarySearch(arr, l, mid-1, x);
}
return binarySearch(arr, mid+1, r, x);
}
return -1;
}
⚠️ 注意: 二分搜索只适用于有序列表。如果列表无序,您必须首先对其进行排序,这可能增加总体搜索时间。