线性搜索
2018-06-08 本文已影响20人
继续向前冲
目标:在数组中找到特定的值。
我们有一个通用对象数组。使用线性搜索,我们遍历数组中的所有对象,并将每个对象与我们要查找的对象进行比较。如果两个对象相等,我们停止并返回当前的数组索引。如果不是,只要我们有数组中的对象,我们就继续寻找下一个对象。
一个例子
假设我们有一个数组数组,[5, 2, 4, 7]
我们想检查数组是否包含数字2
。
我们首先将数组中的第一个数字5
与我们正在查找的数字进行比较2
。它们显然不一样,所以我们继续下一个数组元素。
我们将2
阵列中的数字2
与我们的数字进行比较,并注意它们是相等的。现在我们可以停止迭代并返回1,它是2
数组中数字的索引。
代码
这是Swift中线性搜索的简单实现:
func linearSearch<T: Equatable>(_ array: [T], _ object: T) -> Int? {
for (index, obj) in array.enumerated() where obj == object {
return index
}
return nil
}
把这段代码放在一个操场上,像这样测试它:
let array = [5, 2, 4, 7]
linearSearch(array, 2) // This will return 1
性能
线性搜索在** O(n)**处运行。它将我们正在查找的对象与数组中的每个对象进行比较,所需时间与数组长度成正比。在最糟糕的情况下,我们需要查看数组中的所有元素。
最好的情况是**O(1) **但这种情况很少发生,因为我们要查找的对象必须定位在数组的开头才能立即找到。你可能会很幸运,但大多数时候你不会。平均而言,线性搜索需要查看数组中一半的对象。