【译】Swift算法俱乐部-线性搜索

Swift算法俱乐部

本文是对 Swift Algorithm Club 翻译的一篇文章。
Swift Algorithm Clubraywenderlich.com网站出品的用Swift实现算法和数据结构的开源项目,目前在GitHub上有18000+⭐️,我初略统计了一下,大概有一百左右个的算法和数据结构,基本上常见的都包含了,是iOSer学习算法和数据结构不错的资源。
🐙andyRon/swift-algorithm-club-cn是我对Swift Algorithm Club,边学习边翻译的项目。由于能力有限,如发现错误或翻译不妥,请指正,欢迎pull request。也欢迎有兴趣、有时间的小伙伴一起参与翻译和学习🤓。当然也欢迎加⭐️,🤩🤩🤩🤨🤪。
本文的翻译原文和代码可以查看🐙swift-algorithm-club-cn/Linear Search


Linear Search

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

我们有一组通用对象。 通过线性搜索,我们迭代数组中的所有对象,并将每个对象与我们正在寻找的对象进行比较。 如果两个对象相等,我们停止并返回当前对象在数组中的索引。 如果不相等,只要数组中还有对象,我们就会继续寻找下一个。

一个例子

假设我们有一个数组[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
}

将此代码放在playground里测试:

let array = [5, 2, 4, 7]
linearSearch(array, 2)  // This will return 1

性能

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

最好的情况是 O(1),但这种情况很少见,因为我们要查找的对象必须位于数组的开头才能立即找到。你可能会很幸运,但大部分时间你都不会。平均而言,线性搜索需要查看数组中对象的一半。

扩展阅读

线性搜索的维基百科

作者:Patrick Balestra
翻译:Andy Ron
校对:Andy Ron

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,302评论 3 119
  • 01登楼望 残香满阶人凭栏, 新妆不解落花寒。 尽望日边千舟过, 君回当挂绣罗帆。 2006/12/13 02听夜...
    蓝色河流阅读 302评论 0 4
  • 我在等风,轻轻吹走沙的那种南风,吹干泪水,吹走喜欢的记忆。 莫小羚手中拿着画板,香樟树下,和唐辰幽静的坐着,...
    wei央ing阅读 407评论 0 6
  • 打开窗户,看窗外,有雷,所以我想休息的差不多,是该出去淋雨了。当社会的风雨飘摇,我们无论如何都逃不掉。与其躲避,不...
    听月小法阅读 218评论 0 0
  • 简直就像做梦一般不敢相信,今天已经是2017年的最后一天。有点惶恐,有点忧愁,有点开心,有点失落…… 心里有许多话...
    书香识人阅读 341评论 6 7

友情链接更多精彩内容