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日

相关文章

  • JavaScript数据结构之广义表的定义与表示方法详解

    JavaScript数据结构之广义表的定义与表示方法详解 什么是广义表 广义表是一种包含了无数元素的数据结构,可以是元素或者嵌套的子表。广义表可以表示为: $\quad\quad\quad GL = (a_0,a_1,…,a_n)$ 其中$a_i$可以是元素或者一个子表,如果$a_i$为一个子表,那么$a_i$本身也是一个广义表。广义表中,第一个元素$a…

    数据结构 2023年5月17日
    00
  • C++数据结构与算法之双缓存队列实现方法详解

    C++数据结构与算法之双缓存队列实现方法详解 引言 在实际开发中,双缓存队列是一个非常常见的数据结构,主要用来解决多线程情况下的数据同步问题。本篇文章将详细介绍如何使用C++语言实现双缓存队列。 双缓存队列简介 双缓存队列是一种常用的同步数据结构,它并非一个标准库中的容器,通常需要手动实现。双缓存队列维护着两个缓存区,一个当前使用的缓存区,一个需要被更新的缓…

    数据结构 2023年5月17日
    00
  • Java 中很好用的数据结构(你绝对没用过)

    Java 中很好用的数据结构(你绝对没用过) 介绍 Java 中的数据结构有很多,比如数组、链表、栈、队列、堆、树等等。在这些常见的数据结构中,我们或多或少都会使用到。但是本篇文章要讲述的是一些比较冷门,但是很好用的数据结构。 双向队列(Deque) 双向队列,顾名思义,是一种可以双向操作的队列。它可以从队列的两端插入和删除元素,因此常被用作实现栈和队列以及…

    数据结构 2023年5月17日
    00
  • C数据结构之双链表详细示例分析

    作为本网站的作者,我很高兴为你讲解C数据结构之双链表详细示例分析的完整攻略。 双链表简介与定义 双链表是链表的一种,在链表中每一个节点都有一个指针域,指向下一个节点,这个指针域称为next指针;而在双链表中每一个节点也有两个指针域,一个指向前驱节点,另一个指向后继节点,即prev指针与next指针。由于双链表存在两个指针域,因此它支持双向遍历,无论是正向还是…

    数据结构 2023年5月17日
    00
  • Java数据结构之顺序表篇

    Java数据结构之顺序表篇 什么是顺序表 顺序表是由一组地址连续、大小相等的存储单元依次存储数据元素的线性表。 顺序表的表示 Java语言中,可以使用数组来表示顺序表。 public class SeqList<T> { private Object[] element;// 定义数组存储数据元素 private int length;// 当前…

    数据结构 2023年5月17日
    00
  • Java数据结构之单链表详解

    下面是单链表攻略的详细讲解。 什么是单链表? 单链表是一种线性数据结构,它由一系列结点组成,每个结点包含数据域和指针域。数据域用于存储数据,指针域用于指向下一个结点。单链表的优点是插入和删除操作的时间复杂度为O(1),缺点是随机访问的时间复杂度为O(n)。 单链表的基本操作 单链表的基本操作包括插入操作、删除操作、查找操作和遍历操作。下面将分别介绍这些操作。…

    数据结构 2023年5月17日
    00
  • 解析Facebook的数据库查询引擎Presto在美团的应用

    解析Facebook的数据库查询引擎Presto在美团的应用 什么是Presto? Presto是一个面向分布式查询的数据引擎,由Facebook开发并开源。它支持SQL查询,可以在不同类型的数据源中查询数据(如Hadoop HDFS、Hive等),具有快速、可扩展、灵活等特点。 Presto在美团的应用 美团使用Presto来进行大数据分析,帮助其优化运营…

    数据结构 2023年5月17日
    00
  • C语言数据结构时间复杂度及空间复杂度简要分析

    C语言数据结构时间复杂度及空间复杂度简要分析 什么是时间复杂度和空间复杂度? 在分析算法和数据结构的性能时,时间复杂度和空间复杂度是必须考虑的因素。 时间复杂度:衡量算法执行时间所需的资源,也就是算法的速度。通常使用“大O符号”来表示时间复杂度,例如O(1)、O(n)、O(nlogn)等。 空间复杂度:衡量算法使用的内存资源,也就是算法的空间利用率。通常使用…

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