javascript数据结构与算法之检索算法

JavaScript 数据结构与算法之检索算法

什么是检索算法

检索算法,也称为查找算法,是解决在数据集合中寻找某个特定元素的算法。

比如,在一个给定的数组中查找特定的元素,或者在一个字典中查找某个特定单词的定义等等,这些都是检索算法的应用场景。

JavaScript 中的检索算法主要有以下几种:线性查找、二分查找、哈希查找。

线性查找

线性查找,也叫顺序查找,是最简单的一种查找算法。它的基础思想是从序列中的第一个元素开始比较,直到找到或者搜索完整个序列为止。

以下是线性查找的 JavaScript 代码实现:

function linearSearch(arr, target) {
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] === target) {
      return i;
    }
  }
  return -1;
}

const arr = [85, 24, 63, 45, 17, 31, 96, 50];
const target = 31;
const result = linearSearch(arr, target);
console.log(result); // 5

上述代码中,linearSearch 函数接受两个参数:一个数组 arr 和一个目标元素 target。依次遍历数组中的每一个元素,如果找到了目标元素,就返回对应的索引位置。如果找遍了整个数组都没有找到目标元素,就返回 -1。

二分查找

二分查找,也称为折半查找,是一种非常高效的检索算法。它的基础思想是将有序的数据集合分成两部分,每次查找都根据中间位置的值与目标值的大小关系来确定待查找的区间,在缩小范围中继续查找,直到找到目标值为止。

以下是二分查找的 JavaScript 代码实现:

function binarySearch(arr, target) {
  let left = 0;
  let right = arr.length - 1;
  while (left <= right) {
    const mid = Math.floor((left + right) / 2);
    if (arr[mid] === target) {
      return mid;
    } else if (arr[mid] < target) {
      left = mid + 1;
    } else {
      right = mid - 1;
    }
  }
  return -1;
}

const arr = [17, 24, 31, 45, 50, 63, 85, 96];
const target = 31;
const result = binarySearch(arr, target);
console.log(result); // 2

上述代码中, binarySearch 函数接受两个参数:一个有序数组 arr 和一个目标元素 target。首先初始化两个指针 leftright 分别指向数组的最左端和最右端,然后通过计算中间指针的位置 mid 来将数组分成两部分。如果中间指针所指的数等于目标元素,则找到了目标元素,返回对应的索引位置。如果中间指针所指的数小于目标元素,则将 left 位置更新为 mid + 1。如果中间指针所指的数大于目标元素,则将 right 位置更新为 mid - 1。重复上述过程,直到找到目标元素或者遍历整个数组为止。

示例说明

示例一:线性查找

const arr = [85, 24, 63, 45, 17, 31, 96, 50];
const target = 31;
const result = linearSearch(arr, target);
console.log(result); // 5

上述代码实现了线性查找算法,要查找的目标元素是 31,在数组中的索引位置是 5。

示例二:二分查找

const arr = [17, 24, 31, 45, 50, 63, 85, 96];
const target = 31;
const result = binarySearch(arr, target);
console.log(result); // 2

上述代码实现了二分查找算法,要查找的目标元素是 31,在数组中的索引位置是 2。

总结

检索算法是解决在数据集合中寻找某个特定元素的算法,JavaScript 中的检索算法主要有:线性查找、二分查找和哈希查找。其中,线性查找是最简单的一种算法,适用于规模较小的数据集合;而二分查找是一种高效的查找算法,时间复杂度较低,适用于大规模有序数据的查找。根据具体场景选择不同的检索算法能够提高算法效率,提高代码的执行效率。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javascript数据结构与算法之检索算法 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • Java常见基础数据结构

    Java常见基础数据结构攻略 Java是一种面向对象的编程语言,拥有丰富的数据结构,大多数基础数据结构都包含在Java API中。在本文中,我们将讨论Java中常见的基础数据结构,包括数组、链表、栈、队列、集合和映射。我们将探讨每种数据结构的定义、用法和基本操作,并提供两个示例说明。 数组 数组是Java中最基本的数据结构之一。它是一个有序的集合,可以包含任…

    数据结构 2023年5月17日
    00
  • C语言数据结构实例讲解单链表的实现

    C语言数据结构实例讲解单链表的实现 单链表是一种线性的数据结构,它由一系列节点组成,每个节点都包含一个数据域和一个指向下一个节点的指针域。单链表常用于需要频繁插入删除元素的场景中。 单链表的数据结构设计 在C语言中,我们可以使用结构体来定义单链表的节点: typedef struct node { int data; // 数据域 struct node* …

    数据结构 2023年5月17日
    00
  • C++ 数据结构之kmp算法中的求Next()函数的算法

    C++ 数据结构之kmp算法中的求Next()函数的算法 什么是KMP算法和Next()函数 KMP算法(Knuth-Morris-Pratt算法)是一种字符串匹配算法,能够解决的问题是,在一个文本串S中查找一个模式串P是否出现并且返回第一次出现的位置。而Next()函数则是在KMP算法中使用的一个关键的子函数,用于计算模式串P中每个前缀的最长相同真前缀和后…

    数据结构 2023年5月17日
    00
  • TypeScript 基础数据结构哈希表 HashTable教程

    TypeScript 基础数据结构哈希表 HashTable 教程 什么是哈希表 HashTable 在计算机科学中,哈希表(HashTable),也叫散列表,是根据关键码值(Key­value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫作哈希函数,存放记录的数组叫作哈希表。 如何实现哈…

    数据结构 2023年5月17日
    00
  • C语言结构体详细图解分析

    针对C语言结构体详细图解分析的攻略,我来详细讲解一下。 一、什么是结构体? 结构体是C语言中一种自定义数据结构类型,是将不同类型的变量组合在一起的方式,形成了新的数据类型。结构体成员可以是任意类型的数据,包括基本类型、数组、指针、函数等,可以理解为一个包含多个变量的大变量。 二、结构体的定义和使用 定义结构体的方式为: struct name { type1…

    数据结构 2023年5月17日
    00
  • 「线段树」!(简单)的线段树

    本题为3月20日23上半学期集训每日一题中B题的题解 题面 题目描述 给你一个序列 \(A[1],A[2],…,A[n]\) .( \(|A[i]| \leq 15007, 1 \leq N \leq 50,000\) ). M( \(1 \leq M \leq 500,000\) ) 次询问,每次询问 \(Query(x, y) = Max{A[i] …

    算法与数据结构 2023年4月18日
    00
  • 数据结构基本概念和术语之位字节、字、位串、元素等

    我们先来一一解释数据结构中的基本概念和术语: 1. 位 位是计算机中的最小存储单位,通常表示二进制0或1。8个位组成了1个字节,常用于表示和处理计算机中的文件、数据、程序等。 2. 字节 字节是计算机中的基本存储单位之一,由8个位组成,通常表示1个英文字符或者1个二进制数。在计算机存储中,通常以字节为单位进行数据的存储与传输。 3. 位串 一个由0或1构成的…

    数据结构 2023年5月17日
    00
  • C语言多维数组数据结构的实现详解

    C语言多维数组数据结构的实现详解 多维数组的定义 多维数组是由若干行和若干列构成的数据类型,它由多个一维数组组成。在C语言中,多维数组的定义和一维数组十分相似,只是在数组定义中增加了方括号以表示维数。 下面是一个二维数组的定义: int arr[3][4]; 上述代码定义了一个3行4列的二维数组,标识符为arr,它包含12个元素。其中arr[0][0]到ar…

    数据结构 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部