📜  线性搜寻(1)

📅  最后修改于: 2023-12-03 15:27:33.105000             🧑  作者: Mango

线性搜寻

线性搜寻是一种最基本的搜索算法,也称为顺序搜索或扫描搜索。它的思想是逐一检查每个元素是否与目标值相同,直到找到目标值或搜索完数组。它适用于小规模数据和无序数据,但对于大规模数据和有序数据效率不高。

算法步骤
  1. 从数组的第一个元素开始逐一检查每个元素是否与目标值相同。
  2. 如果找到目标值则返回其所在的位置。
  3. 如果搜索完整个数组还是没有找到目标值,则返回没有找到的标识。
算法分析
  • 时间复杂度:最好情况下是 $O(1)$,即目标值在数组的第一个位置;最坏情况下是 $O(n)$,即目标值在数组的最后一个位置或不存在于数组中;平均情况下是 $O(n)$。
  • 空间复杂度:$O(1)$,只需要常数级别的额外空间存储变量。
  • 稳定性:稳定,因为它不会改变相等元素的顺序。
代码实现

以下是 Python 语言的线性搜寻实现。

def linear_search(arr, target):
    """
    在数组 arr 中线性搜寻目标值 target。
    如果找到则返回其所在的位置,否则返回 -1。
    """
    for i in range(len(arr)):
        if arr[i] == target:
            return i
    return -1

以下是 C++ 语言的线性搜寻实现。

#include <iostream>
#include <vector>

int linear_search(std::vector<int> arr, int target) {
    /*
    在数组 arr 中线性搜寻目标值 target。
    如果找到则返回其所在的位置,否则返回 -1。
    */
    for (int i = 0; i < arr.size(); i++) {
        if (arr[i] == target) {
            return i;
        }
    }
    return -1;
}

int main() {
    std::vector<int> arr = {1, 3, 2, 5, 4};
    int target = 3;
    int idx = linear_search(arr, target);
    if (idx == -1) {
        std::cout << "没有找到目标值" << std::endl;
    } else {
        std::cout << "目标值的位置是:" << idx << std::endl;
    }
    return 0;
}
总结

线性搜寻是一种最简单、最基本的搜索算法,但效率不高,仅适用于小规模数据和无序数据。在实际应用中,更常用的是二分搜寻等高效算法。