线性查找
被定义为一种顺序查找算法
,从一端开始,遍历列表中的每个元素,直到找到所需的元素,否则将继续查找,直到数据集的末尾。
在线性搜索算法中,
- 每个元素都被视为该键的潜在匹配项并进行相同检查。
- 如果找到任何元素等于该键,则搜索成功并返回该元素的索引。
- 如果没有找到与键相等的元素,则搜索结果为"未找到匹配项"。
ini
/// 顺序查找
int search(arr, n, x) {
for (int i = 0; i < n; i++) {
if (arr[i] == x) return i;
}
return -1;
}
void main() {
List<int> arr = [2, 3, 8, 10, 90];
int x = 10;
int n = arr.length;
int result = search(arr, n, x);
(result == -1)
? print("Element is not present in array")
: print("Element is present at index: " + '$result');
}
时间复杂度:
- 最佳情况: 在最好的情况下,键可能出现在第一个索引处。所以最好的情况复杂度是 O(1)
- 最坏的情况: 在最坏的情况下,键可能出现在最后一个索引处,即与列表中开始搜索的末尾相反的位置。因此,最坏情况的复杂度是 O(N),其中 N 是列表的大小。
- 平均情况: O(N)
辅助空间: O(1),因为除了迭代列表的变量之外,没有使用其他变量。
线性搜索的优点:
- 无论数组是否已排序,都可以使用线性搜索。它可以用于任何数据类型的数组。
- 不需要任何额外的内存。
- 它是一种非常适合小型数据集的算法。
线性搜索的缺点:
- 线性搜索的时间复杂度为 O(N),这反过来又使得大型数据集的搜索速度变慢。
- 不适合大型阵列。
什么时候使用线性搜索?
- 当我们处理小数据集时。
- 当您搜索存储在连续内存中的数据集时。