惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
WordPress大学
WordPress大学
人人都是产品经理
人人都是产品经理
Engineering at Meta
Engineering at Meta
小众软件
小众软件
I
InfoQ
有赞技术团队
有赞技术团队
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Martin Fowler
Martin Fowler
月光博客
月光博客
雷峰网
雷峰网
aimingoo的专栏
aimingoo的专栏
云风的 BLOG
云风的 BLOG
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
SegmentFault 最新的问题
The GitHub Blog
The GitHub Blog
Y
Y Combinator Blog
V
Visual Studio Blog
博客园 - 叶小钗
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
GbyAI
GbyAI
P
Proofpoint News Feed
Apple Machine Learning Research
Apple Machine Learning Research

博客园 - Eagle6970

ASP.NET Core实现MCP Streamable HTTP 豆包生成C#微博API HTTP调用实例代码 豆包生成C#即梦API HTTP调用实例代码 SQL Server - sp_spaceused 子网掩码和IP地址范围 [VS Code] Run JavaScript [VS Code] Copy所有包含关键字的行 [数据结构学习笔记25] 归并排序(Merge Sort) [VS Code] 使用dotnet CLI安装和管理NuGet包 [数据结构学习笔记24] 选择排序(Selection Sort) [数据结构学习笔记23] 插入排序(Insertion Sort) [数据结构学习笔记22] 冒泡排序(Bubblesort) [数据结构学习笔记21] 快速排序(Quicksort) [数据结构学习笔记20] 深度优先搜索(DFS)和广度优先搜索(BFS) [数据结构学习笔记19] 二叉树遍历(Binary Tree Traversal) [数据结构学习笔记18] 二分查找(Binary Search) [数据结构学习笔记16] 汉诺塔(Towers of Hanoi) [数据结构学习笔记15] 斐波那契数列(Fibonacci) [数据结构学习笔记14] 递归简介(Recursion)
[数据结构学习笔记17] 线性查找(Linear Search)
Eagle6970 · 2025-01-18 · via 博客园 - Eagle6970

查找算法是指从一个集合里比如数组,列表,树里查找我们想要的值。

我们从最简单的线性查找开始。

线性查找,就是遍历集合里的元素,查看是否有和我们想要查找的值相同的,有则查找成功,没有则查找失败。

比如:

5,8,6,9,1,7,3,2,4

我们要找3,那从5开始依次往后,到了第7个(下标6),我们找到了3。如果我们要找10,同样从5开始,依次往后,一直到最后一个元素,都没有10,所以查找不成功。

function linear_search(collectioin, item) {
  for (let i = 0; i < collection.length; i++) {
        if (collection[i] === item) {
             return i;
         }
   }  
   // Item not found
    return -1;
}

调用函数

let data = [5,8,6,9,1,7,3,2,4];
let result = linear_search(data, 3);
console.log(result); // 6
let result1 = linear_search(data, 10);
console.log(result1); // -1

这里有个要注意的,如果有重复的数据在集合里,只返回第一个匹配的下标。

时间复杂度

线性查找的复杂度是O(n),最好的是O(1),查找的值正好在第一位,最坏的情况有两种,一种查找的值在最后一位,一种是查找的值不存在。

全局线性搜索,返回所有匹配值,包括重复值。

function global_linear_search(collection, item) {
  let foundPositions = [];

  for (let i = 0; i < collection.length; i++) {
       if (collection[i] === item) {
            foundPositions.push(i);
        }
   }  

   if (foundPositions.length > 0) {
          return foundPositions;
    } else {
         return -1;
    }
}

调用global_linear_search

let data = [5,8,3,9,1,7,3,2,4,3,6];
let result = global_linear_search(data, 3);
console.log(result); // [2,6,9]

线性查找适用于小数据集,没有排序,不需要重复查找,或者我们要查找的数据可能在数据集的开始部分。