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日

相关文章

  • PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】

    PHP四种排序算法实现及效率分析 本文将介绍 PHP 中的四种常用排序算法,这四种算法分别是冒泡排序、插入排序、选择排序和快速排序。我们会详细讲解它们的思路、实现方式和效率分析,并对比它们的优缺点,让读者可以更好地理解和运用它们。 冒泡排序 冒泡排序是最基本、最简单的排序算法,其核心思想是从左往右依次比较相邻的两个元素,如果前面的元素比后面的元素大,则交换两…

    算法与数据结构 2023年5月19日
    00
  • C语言每日练习之选择排序

    C语言每日练习之选择排序 选择排序算法简介 选择排序(Selection Sort)是一种简单直观的排序算法。它的基本思路是在未排序的数列中,从前往后依次选择最小的数,和第一个数进行交换,然后在剩余的数列中从前往后选择最小的数,与第二个数进行交换,直到选择到最后一个数为止。 选择排序的时间复杂度为O(n²),属于较慢的排序算法,但是它的实现简单易懂,不需要额…

    算法与数据结构 2023年5月19日
    00
  • Python实现选择排序

    当我们需要对一个列表或数组进行排序时,选择排序是一种简单易懂的方法。Python是一种非常流行的编程语言,它可以轻松实现选择排序。 以下是Python实现选择排序的攻略: 选择排序的原理 选择排序是一种简单直观的排序算法,其基本思想是每次选择出最小的元素,放到已经排好序的部分的末尾。 实现步骤 找到未排序部分的最小元素; 将其放在已排序部分的末尾; 重复步骤…

    算法与数据结构 2023年5月19日
    00
  • Go语言展现快速排序算法全过程的思路及代码示例

    这里是关于“Go语言展现快速排序算法全过程的思路及代码示例”的详细攻略。 什么是快速排序算法 快速排序算法是一种基于比较的排序算法,它通过选择一个基准元素,将数组分为两部分然后递归地对这两部分进行排序,最终完成对整个数组的排序。快速排序算法的时间复杂度为 O(nlogn) 平均情况下,但是在最坏情况下会退化为 O(n^2)。 快速排序算法的实现思路 下面是快…

    算法与数据结构 2023年5月19日
    00
  • 深入理解JS实现快速排序和去重

    深入理解JS实现快速排序和去重 1.快速排序 快速排序是一种快速并且高效的排序算法。下面是快速排序的步骤: 选择数组中的中心元素作为基准点(pivot) 将所有小于基准点的元素移到基准点的左侧,所有大于基准点的元素移到基准点的右侧 对左右两个子数组递归执行步骤1和步骤2,直到子数组长度为1或0 快速排序可以用以下的JavaScript代码来实现: funct…

    算法与数据结构 2023年5月19日
    00
  • JS排序之冒泡排序详解

    JS排序之冒泡排序详解 简介 冒泡排序是最基本,也是最容易实现的排序算法之一。它的基本思想是通过多次循环遍历数组,每次比较相邻两个元素的大小,如果发现顺序不对,就交换它们的位置,通过多次遍历和交换的操作,最终使得整个数组变得有序。 基本思路 遍历数组,将相邻元素的大小进行比较,如果前面元素大于后面元素,则交换它们的位置; 继续以相同的方式遍历数组,直到数组中…

    算法与数据结构 2023年5月19日
    00
  • 详解JavaScript如何实现四种常用排序

    详解JavaScript如何实现四种常用排序 排序是计算机科学中的重要概念,其主要目的是将一组元素按照一定规则进行排序,便于使用。常见的排序算法有四种:冒泡排序、插入排序、选择排序和快速排序。本文将详细讲解如何使用JavaScript实现这四种常用排序。 冒泡排序 冒泡排序是最简单的排序算法之一,其基本思想是将要排序的数据按从小到大的顺序排列。具体实现过程如…

    算法与数据结构 2023年5月19日
    00
  • Golang实现四种负载均衡的算法(随机,轮询等)

    Golang实现四种负载均衡的算法(随机,轮询等) 负载均衡是指在分布式系统中,将工作负载分摊到多个计算资源来进行共同处理的技术。 Golang作为一种高性能、可靠性语言,天然适合做负载均衡,因此我们可以用Golang实现四种常用的负载均衡算法。 什么是负载均衡算法? 负载均衡算法是指在分发服务时,选择合适的服务器来处理请求的一种算法。负载均衡可分为静态负载…

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