JS实现常见的查找、排序、去重算法示例

JS实现常见的查找、排序、去重算法示例

在 JavaScript 中,常见的算法题目也非常多,其中最常见的算法大致可以分为三类,即查找、排序和去重。在这里将对这三个方面中比较常用的算法进行一一解析,以期能够帮助大家更好的理解和掌握这些算法的使用。

一、查找

1. 二分查找

在排序好的数组中查找一个值,如何快速地找到这个值呢?这时候可以使用二分查找算法。它的原理就是先找到数组的中间位置,将待查找值与中间值比较,如果中间值等于待查找值,则查找成功,否则,如果中间值大于待查找值,则继续在低半区间查找,否则,在高半区间查找。不断重复以上步骤,直到找出目标数据。

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

2. 线性查找

线性查找的思想是从数组的第一个元素开始,一直到数组的最后一个元素,逐个比较,直到找到目标值或者已经查找了整个数组。因此,它还称为顺序查找。

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

二、排序

1. 快速排序

快速排序是一种基于分治的排序算法,它将一个数组分为两个子数组,然后递归地将子数组排序。每次递归将位置在中间的值称为基准值,通过比较其他元素和基准值的大小关系,把小于等于基准值的元素放到基准值的左边,把大于基准值的元素放到基准值的右边,从而达到排序的目的。

function quickSort(arr) {
  if(arr.length <= 1) {
    return arr;
  }
  const pivot = arr[0];
  const left = [];
  const right = [];
  for(let i = 1; i < arr.length; i++) {
    arr[i] < pivot ? left.push(arr[i]) : right.push(arr[i]);
  }
  return quickSort(left).concat([pivot], quickSort(right));
}

2. 冒泡排序

冒泡排序是一种交换排序算法,它的原理就是不断地遍历要排序的元素,每一次遍历都将相邻的两个元素相互比较,如果发现他们两个位置不合适,就将他们交换位置。直到整个数组变得有序。

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

三、去重

1. ES6 Set

ES6 中新增的 Set 类型能够帮助我们轻松地完成数组去重的任务。它是一种无序、不重复元素的集合,通过使用 Set,我们可以将数组转换为 Set,再将 Set 转化为数组,并完成去重的任务。

const arr = [1, 2, 3, 2, 1];
const uniqueArr = [...new Set(arr)];
console.log(uniqueArr); // [1, 2, 3]

2. 双重循环去重

双重循环的方式是最常见的一种数组去重方法,原理就是使用双重循环,将要去重的数组中的每个元素拿出来依次与其他元素比较,如果找到相同的值,则将该值从数组中去掉。

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

以上就是常见查找、排序、去重算法的实现示例,希望能够对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS实现常见的查找、排序、去重算法示例 - Python技术站

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

相关文章

  • C++实现位图排序实例

    C++实现位图排序实例攻略 什么是位图排序 位图排序是一种空间换时间的算法,主要针对大量重复性数据的排序问题。其主要思想是将待排序的数据作为位图的索引,将出现的数据标识为1,最后按照位图的索引顺序输出结果。 如何实现位图排序 具体实现步骤如下: 确定位图最大数据值及位图长度。假设需要排序的数据范围是[1,10000],对应的位图长度为(10000/8)+1=…

    算法与数据结构 2023年5月19日
    00
  • redis zset实现滑动窗口限流的代码

    Redis ZSET(有序集合)非常适合实现滑动窗口限流。下面是实现滑动窗口限流的Redis ZSET代码攻略: 步骤一:定义一个键和窗口大小 为了使用Redis ZSET实现滑动窗口限流,您需要为每个限流器定义一个键。键的值将存储在Redis Sorted Set中,并且每个元素将具有其分数。我们将使用时间戳作为分数。此外,需要指定每个限制限流器的窗口大小…

    算法与数据结构 2023年5月19日
    00
  • TypeScript十大排序算法插入排序实现示例详解

    针对“TypeScript十大排序算法插入排序实现示例详解”的完整攻略,我有如下的描述和示例: 1. 算法简介 插入排序(Insertion Sort)是一种简单直观的排序算法。它的基本思想是将目标数组分为已排序和未排序区间,每次从未排序区间中选取一个元素并插入到已排序区间中正确的位置。 插入排序是一种相对基础的排序算法,不仅实现起来比较简单,而且时间复杂度…

    算法与数据结构 2023年5月19日
    00
  • PHP哈希表实现算法原理解析

    PHP哈希表实现算法原理解析 什么是哈希表 哈希表又称为散列表(Hash Table),是根据关键码值(Key-Value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到 Hash 表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做哈希函数(Hash Function),存放记录的数组叫做哈希表(Hash Table)。 PHP哈希表实现…

    算法与数据结构 2023年5月19日
    00
  • 2019年京东前端工程师面试题(附答案)

    本次将会以京东前端工程师面试题为例,详细讲解如何准备和应对前端岗面试。 第一步:了解面试整体流程和考察的技能点 在准备面试前,需要先了解面试的整体流程和所考察的技能点,从而根据需要和缺点来进行有针对性的准备。 面试的整体流程一般包括: 自我介绍和岗位广告 聊聊项目和技术栈 问题解答和技术评测 算法/编码能力测试 HR面试 而在前端工程师的岗位面试中,考察的技…

    算法与数据结构 2023年5月19日
    00
  • python快速排序代码实例

    Python 快速排序 (Quick Sort) 是一种排序算法,它利用分治思想来快速排序一个数组或序列。该算法的时间复杂度为 O(nlogn)。 要理解快速排序算法,我们需要掌握以下概念: 基准值 (pivot):排序过程中用于比较的值。在每一轮的排序过程中,基准值会将数组或序列分成两部分。 子数组 (subarray):对于一个数组或序列,它的一部分就是…

    算法与数据结构 2023年5月19日
    00
  • php实现归并排序算法的方法详解

    PHP实现归并排序算法的方法详解 归并排序算法简介 归并排序是一种使用分治法思想的高效稳定排序算法。其基本思想是将待排序的序列拆分成若干个子序列,对每个子序列进行排序,然后将排序后的子序列合并成一个大的有序序列。 归并排序算法的复杂度为O(nlogn),适用于各种数据规模的排序。 归并排序算法步骤 将序列递归拆分成若干个子序列。 对每个子序列进行递归排序。 …

    算法与数据结构 2023年5月19日
    00
  • STl中的排序算法详细解析

    STl中的排序算法详细解析 概述 在STL中,sort是一种常用的排序算法。sort算法旨在将元素从小到大排序,但也可以使用cmp函数指定排序方式。 算法实现 sort算法基于“快速排序”算法的实现。其基本思想是从待排序列中选取一定的数值作为划分元素(pivot),通过一趟排序将所有比该元素小的数放到它的左边,所有比该元素大的数放到它的右边,然后再对左右两个…

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