美文网首页iOS Developer
Swift算法俱乐部中文版 -- 线性搜索

Swift算法俱乐部中文版 -- 线性搜索

作者: 云抱住阳光太阳没放弃发亮 | 来源:发表于2016-10-31 16:01 被阅读59次

目标:在数组中查找特定值。

我们有一个对象的数组。使用线性搜索,我们遍历数组中的所有对象,并将每个对象与我们要查找的对象进行比较。如果两个对象相等,我们停止搜索并返回当前数组的索引。如果没有,我们继续寻找下一个对象,直到所有对象都被搜索。

举个栗子


假设我们有一个数字数组 [5, 2, 4, 7] ,我们想检查数组是否包含数字 2

我们首先比较数组中的第一个数字, 5 ,去和 2 比较,它们显然不一样,所以我们继续下一个数组元素。

我们将数组的第2个元素 22 进行比较,注意它们是相等的。现在我们就可以停止搜索并返回数组索引 1 了。

代码


func linearSearch<T: Equatable>(_ array: [T], _ object: T) -> Int? {
    for (index, obj) in array.enumerated() where obj == object {
        return index
    }
    return nil
}

在 playground 中测试:

let array = [5, 2, 4, 7]
linearSearch(array, 2)  // 返回 1

性能


线性搜索的性能是 O(n) ,它会比较数组中的每个元素,所需的时间与数组的长度成正比。在最坏的情况下,我们需要查看数组中的所有元素。

最好的情况是 O(1) ,但这种情况很罕见,我们寻找的元素正巧在数组的最开头,会在第一次比较中被找到。你可能会幸运,但大部分时间你不会。 平均来说,线性搜索需要查看数组中一半的对象。

作者:Patrick Balestra

英文链接:
https://github.com/raywenderlich/swift-algorithm-club/blob/master/Linear%20Search/README.markdown

相关文章

网友评论

    本文标题:Swift算法俱乐部中文版 -- 线性搜索

    本文链接:https://www.haomeiwen.com/subject/uvlputtx.html